建立秘钥,默认情况下是rsa。
建立的秘钥所在的目录默认是/home/oldgirl/.ssh/id_dsa。
接下来的两步操作是设置密码,可以不设置,直接空格。
查看所有文件中会有一个.ssh。
.ssh下生成两个文件,id_dsa是私钥,id_dsa.pub是公钥。
id_dsa文件的权限比较小,pub的权限大,若权限不对,则设置错误。
默认端口下,使用命令ssh-copy-id -i .ssh/id_dsa.pub oldgirl@10.0.0.100可以分发密钥。特殊情况下使用命令ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 oldgirl@10.0.0.100"分发密钥,出现.ssh/authorized_keys表示成功。
通过修改文件ssh-copy-id下的ssh $1使之变成ssh -p52113 $1。可以直接使用命令ssh-copy-id -i .ssh/id_dsa.pub oldgirl@10.0.0.100分发密钥。
不修改的话,前提是特殊端口情况下,是发送不过去的。
发送成功,显示文件authorized_keys,发送前后名字不一样,并且权限也变了。
使用命令ssh -p22 oldgirl@10.0.0.100直接连接上去,不用输入密码。这样就实现了由一台机器连向两台机器。
在/etc/ssh/sshd_config文件下有.ssh/authorized.keys。就可以免密码进入。
把 scp -P22 a.txt oldgirl@10.0.0.100:~和 scp -P22 a.txt oldgirl@10.0.0.200:~放到文件fenfa.sh中,执行命令sh fenfa.sh可以实现一个简单的分发。
$1表示/etc/hosts下的hosts文件。
scp -rp:-p:保留原文件的修改时间,访问时间和访问权限。-r:递归复制整个目录。
解决ssh连接慢的问题:
如果还慢的话,检查ssh服务端上/etc/hosts文件中,对应ip对应的主机名是否和uname -n的结果一样,或者把本机ip和hostname加入到/etc/hosts里。
ne:不等于的意思。
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
...
关于exit 1:当你 exit 0 的时候,在调用环境 echo $? 就返回0,也就是说调用环境就认为你的这个程序执行正确 当你 exit 1 的时候,一般是出错定义这个1,也可以是其他数字,很多系统程序这个错误编号是有约定的含义的。 但不为0 就表示程序运行出错。 调用环境就可以根据这个返回值判断 你这个程序运行是否ok。 如果你用 脚本 a 调用 脚本b ,要在a中判断b是否正常返回,就是根据 exit 0 or 1 来识别。 执行完b后, 判断 $? 就是返回值
借助脚本取ip,100,200是本机的ip地址,10.0.0.100和10.0.0.200。
写一个脚本,向其他两台虚拟机传送文件。
各种参数代表的意思。
以上三幅图是通过一个脚本向目标虚拟机中传送文件的一个过程,其中sh -x fenfa1.sh hosts /home/oldgirl/中-x参数起到了一个调试的作用,然后通过命令sh fenfa1.sh hosts /home/oldgirl/向目标虚拟机发送文件。
如果出现以上情况,用以下方法解决。
此时需要在服务虚拟机中使用命令visudo进行一次提权。在最后边加入oldgirl ALL=(ALL) NOPASSWD: /bin/cp
修改完之后进行一个检测,进入oldgirl用户,执行命令sudo -l发现有cp命令。
直接用cp命令显示权限不够,这时候用sudo提权就能运行了。
直接执行命令cp hosts /etc发现权限不够,这时候直接用sudo cp hosts /etc就能完成。
把其他两台虚拟机也执行一遍echo "oldgirl ALL=(ALL) NOPASSWD: /bin/cp" >> /etc/sudoers,然后执行命令visudo -c显示解析正确。
想要使用ssh hostname sudo <cmd>这个命令,有两个方法:
1.使用参数-t,完整命令ssh -t hostname sudo <cmd>。下面的几幅图是例子:
2.把defaults requiretty前面加#引起来。(这样会出现安全隐患,别人也可以远程sudo你的电脑。)
以上三幅图是老男孩老师的上课内容,以下两幅图是我自己的虚拟机写的,差别在不适用-t参数也没有提示错误。还请高手指教,其中10.0.0.20是我的另外一台虚拟机: