我正在为如何做事而苦苦挣扎。
我的目标是,当在我的跳转主机上输入 ssh router1 时,它将 ssh 到路由器,同时运行一个 Expect 脚本以从密码文件(其中 ofcource 对我来说只读)填写我的密码,最好应该发送加密器,这样任何人都无法获取它。
我已经设法让一个期望脚本可以工作,但我不想在我的文件夹中有无数的期望脚本(对于我们拥有的路由器数量)。
我认为可以使用别名命令来完成?我已经设置了别名命令,这样如果我输入 router1 ,它会自动 ssh 到该特定路由器。
(我收到一条消息说这是重复的,但我未能成功找到重复的问题,所以我将尝试进一步解释:假设我们在我的公司有 100 个路由器。现在我已经创建了别名'因此,当我在提示符中输入 router1 时,它将执行 ssh router1 操作,我想通过自动填写密码来尝试扩展该功能并节省一些宝贵的时间。
换句话说,我正在寻找一种将别名与期望脚本(如果需要的话,可能还有 bash 脚本)结合起来的方法,而且我在任何脚本编写方面都非常糟糕
希望有人可以帮忙:)
答案1
Expect 和 send 将以明文形式发送 - 但您的 SSH 连接将进行加密。
但为什么不尝试使用 SSH 配置和基于私钥/公钥的身份验证,而不是编写脚本(并在其中存储您的密码!)。
首先,生成您自己的 SSH 私钥和随附的公共存根。只需运行
ssh-keygen
要么提供密码(该密码可能与用户帐户密码不同,每次登录时都必须提供),要么不提供(密钥上没有密码,因此永远不会提示您输入密码)。即使您为密钥对分配密码,本地密钥环服务也可能会缓存身份验证并自动为您解锁,具体取决于您使用的桌面环境。
然后将 ~/.ssh/id_rsa.pub 文件复制到远程主机:~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub user@remotehost:~/
ssh user@remotehost
mkdir .ssh
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
并退出。然后编辑您自己的 ~/.ssh/config 并添加如下条目
Host router
Hostname 192.168.1.1
User routerusername
Port 22
第一个主机行上给出的名称不需要是 DNS 名称,它可以是昵称或您喜欢的任何名称。配置文件支持所有命令行选项,如 X 转发等。您甚至可以为不同的主机指向不同的身份文件......
现在只需做
ssh router
您将自动登录。