ssh是linux管理时常用的一个服务,ssh有个特点,属于交互式操作,就是当你执行ssh时,他会要求你手动输入密码 这就给shell脚本带来了麻烦,如果想在脚本中使用ssh进行自动化远程操作,非常不方便 ssh支持双方配置后的免密码操作,但比较麻烦 还有一种常用的方式:expect,把密码放入脚本,执行expect,他可以帮助我们自动完成输入密码的这个交互,expect实质是进行模拟操作,执行脚本时会感觉到这个动作 下面介绍下 sshpass,以非交互式操作ssh,可以直接在命令行指定密码,方便了很多
使用示例
(1)命令行中指定密码 ./sshpass -p 密码 ssh -o StrictHostKeyChecking=no root@15.28.16.3 -p 端口号 "ls" StrictHostKeyChecking=no 避免第一次登录时出现公钥检查,如果不指定这个参数,执行时会发现没有反应,实际上是背后执行了检查操作,没有显示出来,所以感觉是没有响应 -p 端口号 是对方机器ssh的端口号,如果是默认端口,可以省略这个参数 上面是ssh命令的示例,远程拷贝也是常用的操作,示例: ./sshpass -p 密码 scp -P端口号 15.28.16.3:/root/test.txt . (2)指定密码文件 可以把密码保存到文件中,sshpass命令中用参数指定密码文件 把密码写入文件 echo "密码" > ssh_passwd 执行sshpass 指定文件 ./sshpass -f ssh_passwd ssh -o root@15.28.16.3 "ls" (3)从环境变量读密码 还可以把密码设置到环境变量,变量名要为 SSHPASS export SSHPASS="密码" ./sshpass -e ssh -o root@15.28.16.3 "ls"
安装sshpass
下载地址 http://sourceforge.net/projects/sshpass/
安装
tar zxvf sshpass-1.05.tar.gz cd sshpass-1.05 ./configure --prefix=/usr/local/sshpass make make install 安装完成后,sshpass命令在/usr/local/sshpass/bin下,执行即可