問題はこれです:私は少なくとも3つの異なるネットワーク(時には直接、時にはプロキシを介して)からアクセスできるシステムに異なる時間にSSHを介してアクセスしようとしています。
直接接続は中間ホストを介して接続するよりも高速で信頼性が高く、通常のインターネットを介して接続するよりも高速で信頼性が高いため、SSHは優先順位に応じて3つの異なる方法で接続を試み、最初の方法を選択します。それが成功します。
明らかに、それらはすべて同じシステムなので、接続位置に応じて3つの異なるエイリアスの中から手動で選択したくありません。
ただし、この問題を解決するメカニズムが見つかりません。でもこれは可能ですか?
そうでなければ、人々は通常この状況で何をしますか?
答え1
エイリアスを使用して接続しないでくださいssh
。正しいものを使用してくださいssh_config
。~/.ssh/config
本当に強力な機能があります。
現在どのネットワークにいるのかを識別できるとします。たとえば、IPを使用して次hostname -I
の設定を作成します。
# in network1 I am getting ip from "10.168.*.*" and I need to connect through proxy
Match Host myalias Exec "hostname -I | grep 10\.168\."
Hostname real-host-IP
ProxyCommand ssh -W %h:%p proxy-server
# in network2 I am getting IP from "192.168.*.*" and I do not need a proxy
Match Host myalias Exec "hostname -I | grep 192\.168\."
Hostname real-host-IP
# in network3 I am getting something else
答え2
.bashrc
シェルの構成ファイルまたは他の構成ファイルにシェルエイリアスまたは関数を保存できます。たとえば、Bash エイリアスの場合:
alias my_ssh="
ssh mehrdad@"IP1 ||
ssh tomas@IP2 ||
ssh tomas@IP3
"
次にエイリアスを呼び出します。
my_ssh
IP1 が失敗した場合は、||
2 番目のコマンドを実行します。これでIP3が再び表示されます。
私はこれをテストしていませんが、大丈夫でしょう。または、少なくとも方法を示した。
プロキシなどのSSHオプションを参照してくださいman ssh
。
答え3
セキュリティへの影響やインフラストラクチャ(不明)の制限を無視し、他のソリューションよりも優れたソリューションが複数ある可能性があります。
- SSHリバーストンネルを実行します(醜いハッキング)。
- OSPFまたはBGPの助けを借りてエニーキャストを設定し、エニーキャストVIPにSSHとして接続します。
- リモートコンピュータのIPsecトンネル設定 - プロキシは必要ありません。
- Tor経由で通信
- サイト/ページ/Redis/MySQLサーバーを現在のアドレスに更新し、sshスクリプトを使用してそれらをインポートします。
- HAProxyを使用してください。
- 動的DNS。
答え4
これはうまくいくかもしれませんが、トーマスのエイリアスがうまくいくなら、これはより良い解決策だと思います。
autossh () {
publicip="11.11.11.11"
privateip="10.10.10.100"
proxyhost="10.10.10.10"
proxyport="9001"
ssh -o ConnectTimeout=10 $1@$privateip 2> /dev/null && exit 0
if [ $? -ge 1 ]; then
ssh -o ConnectTimeout=10 $1@$publicip -o "ProxyCommand=nc -X connect -x $proxyhost:$proxyport %h %p" 2> /dev/null && exit 0
if [ $? -ge 1 ]; then
ssh -o ConnectTimeout=10 $1@$publicip 2> /dev/null && exit 0
if [ $? -ge 1 ]; then
echo "I think your node is down"
fi
fi
fi
}