在使用ssh对服务器进行远程操做时,都须要停下来输入密码,这在批量执行脚本时很不方便。html
能够使用sshpass来进行执行,将password经过命令行、环境变量或者文件传递进去,从而能够彻底在脚本里面跑执行命令,实现自动化的操做。这里主要分享Ubuntu上面的使用状况。linux
输入命令:git
$ sudo apt-get install sshpass
安装完毕后,直接输入sshpass将显示帮助信息。shell
Login 到 ssh server(server.example.com),password 为 t@uyM59bQ:bash
$ sshpass -p 't@uyM59bQ' ssh username@server.example.com
对于shell script,你可能须要 disable host key 检查:服务器
$ sshpass -p 't@uyM59bQ' ssh -o StrictHostKeyChecking=no username@server.example.com
能够在脚本中使用-p参数、SSHPASS环境变量、文件等方式读取password的值并自动传递给ssh。less
sshpass -p mypassword ssh user@server ifconfig
上面的命令将使用mypassword和user帐户登陆到server并执行ifconfig命令后,自动退出。ssh
sshpass -p MyPassWord ssh root@remoteServerIP "apt update && apt upgrade -y && apt autoremove -y"
语法:ide
SSHPASS='t@uyM59bQ' sshpass -e ssh vivek@server42.cyberciti.biz SSHPASS='t@uyM59bQ' sshpass -e ssh vivek@server42.cyberciti.biz date SSHPASS='t@uyM59bQ' sshpass -e ssh vivek@server42.cyberciti.biz w SSHPASS='t@uyM59bQ' sshpass -e ssh -o StrictHostKeyChecking=no vivek@server42.cyberciti.biz |
password 经过名为 SSHPASS 的环境变量传递进去。加密
另一个选项是从文件读取password,使用 -f 选项。语法为:
sshpass -f fileNameHere ssh user@server
建立文件,以下:
$ echo 'myPassword' > myfile $ chmod 0400 myfile $ sshpass -f myfile ssh vivek@server42.cyberciti.biz |
经过SSH运行rsync,启用password authentication, 传递 password 在命令行中:
$ rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/
或者:
$ SSHPASS='yourPasswordHere' rsync --rsh="sshpass -e ssh -l username" server.example.com:/var/www/html/ /backup/
首先,建立文件以下:
$ echo 'mySshPasswordHere' > .sshpassword
如今,使用gpg command加密文件:
$ gpg -c .sshpassword
$ rm .sshpassword
最后,以下使用:
$ gpg -d -q .sshpassword.gpg > fifo; sshpass -f fifo ssh vivek@server1.cyberciti.biz
更多信息: