如何编写带密码的ssh登录脚本

2,211 阅读2分钟

本教程解释了如何在连接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登录脚本的教程是有用的。