我正在研究一个带有计算节点和 2 个主节点的小型集群。我可以使用 ssh 跃点从本地机器连接到主节点或直接连接到计算节点。这是我本地机器上的 .ssh/config:
Host master0
HostName 132.166.138.122
User OJ239416
Host master1
HostName 132.166.138.121
User OJ239416
Host node*
ProxyCommand ssh -Y master1 nc %h %p
User OJ239416
一旦连接到任何计算或主节点,我可以使用此脚本移动到另一个节点(以保留环境和工作目录):
#!/usr/bin/env sh
if [[ $# != 1 ]]; then
echo 'USAGE:'
echo ' sssh remotename'
exit 1
fi
DIR=$PWD
printenv | sed -e '/_=.*/ d;s/\([^=]\+\)=\(.*\)/export \1="\2"/' > $HOME/.sssh-env.txt
echo "$PWD" > $HOME/.sssh-pwd.txt
ssh -X $1
在我的 .bashrc 中有这个:
if [ -f "$HOME/.sssh-env.txt" ]; then
source $HOME/.sssh-env.txt
cd $(cat $HOME/.sssh-pwd.txt)
rm $HOME/.sssh-env.txt
rm $HOME/.sssh-pwd.txt
fi
什么不起作用:如果我从本地计算机连接到主节点,然后使用我的脚本移动到另一个节点,我没有显示。
有趣的是,如果我从本地计算机连接到一个计算节点,然后使用脚本移动到另一个计算节点,它就可以工作(但如果我从一个计算节点转到一个主节点......)。
感谢您的帮助!