![ssh 到嵌套服务器并收集一些信息](https://linux22.com/image/124656/ssh%20%E5%88%B0%E5%B5%8C%E5%A5%97%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B9%B6%E6%94%B6%E9%9B%86%E4%B8%80%E4%BA%9B%E4%BF%A1%E6%81%AF.png)
我最近遇到了一些困难,我想编写一个脚本来自动登录嵌套服务器以收集每个服务器上的一些信息:(具体来说,用于nvidia-smi
收集GPU usage info
每台机器上的信息)
嵌套服务器结构如下:(
user@boss
)user@machine1, user@machine2, user@machine3, ...
通常我们必须使用ssh
登录user@boss
,然后ssh
到特定机器来完成我们的工作,但监视所有机器GPU使用情况并不方便,我尝试编写一个脚本,例如:
sshpass -p "xxxx" ssh -o StrictHostKeyChecking=no [email protected]
for v in machine1 machine2
do
sshpass -p "xxxx" ssh -o StrictHostKeyChecking=no v
echo $v
nvidia-smi
done
但它只登录到user@boss,我对服务器的东西不熟悉,user@boss是根节点,那么machine1,machine2,...是子节点?有人可以帮忙吗?(注意我没有 root 权限)
添加服务器包括 user@boss 和 user@machine1, user@machine2, ... 都没有sshpass
安装,仅ssh
支持
答案1
不要使用密码验证。仅使用公钥身份验证,并为您的 ssh 密钥使用良好、强的密码。
看为什么使用 SSH 密钥比使用密码更安全?以及有关密钥与密码的有趣讨论的链接和相关帖子。
您可以将 ssh 配置为始终使用代理主机连接到远程主机。
例如在你的~/.ssh/config
:
Host machine1 machine2 machine3
ProxyJump user@boss
那么ssh machine1
将会总是通过boss
.连接
从man ssh_config
:
代理跳转
将一个或多个跳转代理指定为
[user@]host[:port]
。多个代理可以用逗号分隔,并且将按顺序访问。
设置此选项将导致
ssh
(1) 连接到目标主机,方法是首先ssh
与指定ProxyJump
主机建立 (1) 连接,然后建立从那里到最终目标的 TCP 转发。