我尝试编写一个 shell 脚本,它可以使用脚本中提到的密码自动登录 ssh 服务器。我编写了以下代码:
set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect
{
"[email protected]'s password"
{
send "password\r"
}
}
该代码无法正常运行,仍然要求输入密码。有人可以帮我解决这个问题吗
答案1
我曾经写过一个expect
脚本来登录 ssh 服务器(就像你的情况),我的脚本是这样的:
#!/usr/bin/expect
spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact
我想interact
你的脚本中可能缺少这个。
答案2
你的做法是错误的。您想要做的是生成一个无密码的 ssh 密钥对,然后(只要服务器支持 RSA 密钥身份验证)您就可以无需输入密码即可进入。如果您的私钥存储在可能被盗的地方,则会存在安全风险。
按着这些次序:
mkdir -p ~/.ssh
cd ~/.ssh
ssh-keygen -type dsa -i mysshkeys
- Return当提示输入密码时按
- 按Return第二次确认。
现在您的目录中将有两个文件~/.ssh
,mysshkey.pub
以及mysshkey
.mysshkey.pub
是您的公钥,可以安全地将其放在远程服务器上。mysshkey
是您的私人无密码密钥,它是不是可以安全地放在远程服务器上(或者其他人可以获得副本的地方)。
在您希望通过 SSH 访问的服务器上:
- 登录远程服务器
mkdir -p ~/.ssh
- 将内容复制并粘贴
mysshkey.pub
到~/.ssh/authorized_keys
- 确保这
~/.ssh/authorized_keys
是chmod
为了600
现在,要在本地计算机上将其付诸实践,请运行以下命令:
ssh -i ~/.ssh/mysshkey <remote_server_ip>
您将在不提示输入密码的情况下登录。
这是管理自动登录的一种更可取的方法,因为您最终不会在多个位置硬编码密码,如果您更改密码,则需要更新密码。
答案3
在基于 Debian 的发行版上,该sshpass
软件包提供了一种更简单的方法来完成您想要的操作。该软件包可用于许多其他流行的发行版。您需要先进行设置:
echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt
然后从脚本中调用 SSH 命令,如下所示:
sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]
与使用expect
.
答案4
首先安装sshPasssudo apt-get install sshpass
然后在 .bashrc 文件中创建一个别名
alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'
现在重新加载更改后的 .bashrc 文件source ~/.bashrc
现在你已经完成了。
sshLogin
现在您可以在终端中使用上面创建的别名运行 ssh 。