shell SSH远程无密码登录和操作
SSH远程一台设备
SSH 为建立在应用层基础上的安全协议,用户可以通过SSH协议远程访问同一个网段的其他设备,此时只需要将设备和路由器连接就行了,而不用将设备和PC连接在一起,而后用户就可以通过PC轻松访问该设备了。
SSH的指令模式如下:
主要参数说明:
-l 指定登入用户
-p 设置端口号
-f 后台运行,并推荐加上 -n 参数
-n 将标准输入重定向到 /dev/null,防止读取标准输入
-N 不执行远程命令,只做端口转发
-q 安静模式,忽略一切对话和错误提示
-T 禁用伪终端配置
SSH执行远程登录的命令格式:
Ssh [options][remote host][command]
假设远程设备的IP是109.105.116.100
则命令行可以为:
ssh root@109.105.116.100
SSH远程登录并执行指令格式:
Ssh [options][remote host][command]
注意:此时的command是需要双引号“”括起来的。
比如:ssh root@109.105.116.86 "ls"
如果有连续指令需要执行的话,则需要用分号“;”将不同的语句隔开,比如:
#ssh root@192.168.0.107 "cd /home/testbed/DUT; ls"
SSH远程多台设备
当有多台设备需要用SSH远程的时候,如果再一台台的手动链接会比较麻烦,此时就可以通过一个脚本来实现SSH远程无密码登录。
生成秘钥
SSH无密码登录首先需要生成一个公钥。
ssh-keygen -t rsa -P ''
其中-P为设置password, ''表示密码为空,这时候系统会自动生成秘钥。也可以这样
ssh-keygen -t rsa
此时需要四次回车来完成密码设置过程。
这样生成了一对密钥,存放在用户目录的~/.ssh下,名称为id_rsa.pub。
秘钥拷贝
当秘钥生成了之后,就需要通过SSH将秘钥拷贝到远程设备上。拷贝命令为ssh-copyid。
ssh-copy-id –I root@192.168.0.107
之后就可以通过shell脚本的for循环来远程操作每个设备,然后执行设备里的文件了。
ip_array=(1 2 3 4 5 6 7 8 9)
for IP in ${ip_array[@]}
do
echo "the ip is $IP"
ssh ${IP_PATH}${IP} "cd /home/testbed/DUT/Project_Shell;
chmod 777 *;
./dut_start.sh;
sleep 1;
exit"
done