本教程解释了如何在连接ssh时自动用密码登录。
读完本教程后,你会知道如何实现一个脚本,在连接ssh时用密码自动登录。此外,你会发现使用sshpass工具自动登录ssh密码的说明。最后,本教程解释了如何在没有密码的情况下用公钥认证进行连接。
如何编写带密码的ssh登录脚本
首先,通过运行下面的命令安装 expect。
sudo apt install expect -y

通过运行下面的命令创建一个shell脚本。你可以为你的脚本使用任何任意的名字。
nano sshscript.sh

在该文件中复制以下代码,用你的用户名和服务器替换linuxhint@192.168.1.103。同时,用你的实际密码替换passwordhere。
#!/usr/bin/expect -f
spawn ssh linuxhint@192.168.1.103
expect "Password:*"
send "passwordhere\r"
expect "$ "
interact

通过运行下面截图中的命令给予脚本执行权限,用你的脚本名称替换sshscript.sh。
chmod +x sshscript.sh

然后,运行该脚本,你会自动连接,而不需要输入密码,如下图所示。

如何使用sshpass自动用密码登录ssh。
另一个通过ssh连接并自动输入密码登录的选择是sshpass工具。尽管你可以使用apt、yum或任何其他软件包管理器安装sshpass,但建议下载其最新版本并从源头安装。一些用户报告了在一些软件包管理器中发现的旧版本的问题。
要下载sshpass的当前版本,请运行下面的命令。
wget https://sourceforge.net/projects/sshpass/files/sshpass/1.08/sshpass-1.08.tar.gz

使用下面的命令提取.tar.gz包。
tar xvzf sshpass-1.08.tar.gz

进入安装目录。
cd sshpass-1.08

运行下面的命令来安装sshpass。
./configure && make && make install

安装完毕后,运行下面的命令,连接到你的服务器。用你的实际密码替换这里的密码。同时,用你的用户名和服务器IP替换linuxhint@192.168.1.103。
sudo sshpass -p "passwordhere" ssh linuxhint@192.168.1.103

正如你所看到的,连接已经正常完成。
使用公钥认证连接到ssh而不需要密码。
一个更好更安全的无需输入密码的连接方式是使用公钥。
通过运行下面的命令,从你要连接的客户端生成公钥和私钥。当要求输入口令时,让该字段为空,然后按ENTER。
ssh-keygen

现在你需要把公钥复制到你想连接的服务器上。要复制公钥到服务器,运行下面的命令,用你的实际用户名替换linuxhint,用服务器的IP地址替换192.168.1.103。
ssh-copy-id linuxhint@192.168.1.103

一旦公钥被复制到服务器上,你就可以通过运行以下命令进行连接。用你的用户名和IP地址替换。
ssh linuxhint@192.168.1.103

总结
我希望这个解释如何用密码编写ssh登录脚本的教程是有用的。