pra*_*tri 34 password ssh expect
我尝试编写一个 shell 脚本,它可以使用脚本中提到的密码自动登录到 ssh 服务器。我编写了以下代码:
set timeout 30
/usr/bin/ssh -p 8484 root@172.31.72.103
expect
{
"root@172.31.72.103's password"
{
send "password\r"
}
}
Run Code Online (Sandbox Code Playgroud)
此代码运行不正常,仍然要求输入密码。有人可以帮我解决这个问题吗
sae*_*edn 46
我曾经写过一个expect脚本来登录 ssh 服务器(就像你的情况一样),我的脚本是这样的:
#!/usr/bin/expect
spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact
Run Code Online (Sandbox Code Playgroud)
我认为interact您的脚本中可能缺少 。
syn*_*tel 35
你这样做是错误的。您要做的是生成一个无密码的 ssh-key 对,然后(只要服务器支持 RSA 密钥身份验证)您就可以进入,而无需为所有人输入密码。如果您的私钥存储在可能被盗的地方,则存在安全风险。
按着这些次序:
mkdir -p ~/.sshcd ~/.sshssh-keygen -type dsa -i mysshkeys现在您的~/.ssh目录中将有两个文件,mysshkey.pub以及mysshkey. mysshkey.pub是你的公钥,这个可以安全地放在远程服务器上。mysshkey是您的私人密码的钥匙,它是不是安全的把远程服务器上(或某个其他人可以得到一个副本)。
在您希望通过 SSH 连接的服务器上:
mkdir -p ~/.sshmysshkey.pub到~/.ssh/authorized_keys~/.ssh/authorized_keys是chmod'd600现在,要在本地机器上运行它,请运行以下命令:
ssh -i ~/.ssh/mysshkey <remote_server_ip>
Run Code Online (Sandbox Code Playgroud)
并且您将登录而不提示输入密码。
这是管理自动登录的一种更可取的方法,因为您最终不会将密码硬编码到多个地方,如果您更改密码,则需要更新这些地方。
小智 21
在基于 Debian 的发行版上,该sshpass软件包提供了一种更简单的方式来做你想做的事。该软件包可用于许多其他流行的发行版。您需要先设置它:
echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt
Run Code Online (Sandbox Code Playgroud)
然后从这样的脚本调用 SSH 命令:
sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 root@172.31.72.103
Run Code Online (Sandbox Code Playgroud)
与使用expect.
小智 8
首先安装sshPass sudo apt-get install sshpass
然后在 .bashrc 文件中创建一个别名作为
alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'
Run Code Online (Sandbox Code Playgroud)
现在通过以下方式重新加载更改的 .bashrc 文件 source ~/.bashrc
你现在已经完成了。
现在您可以sshLogin在终端中使用上面创建的别名运行 ssh 。