リモートコンピュータに自動的にログインする方法を見つける必要があります。いくつかの方法でこれを行うことができますが、これは私にとって少し面倒です。
リモートコンピュータに自動的にログインしてコマンドまたはスクリプトを実行し、出力をローカルシステムファイルにリダイレクトします。
ssh remote-host < ./script >> storageinfo_$date.txt
しかし、難しい部分は、リモートホストに直接接続できないことです。まずJumphost1
--> Jumphost2
--> に接続し、次に --> に接続する必要があります。remote-host
Jumphostx では sshkeygen が有効になっていますが、パスワードの例は次のとおりです。userpass
リモートホストでは sshkeygen が有効になっていません。例:remotepass
.ssh/config
次のようにファイルを使用してこれを行いました。これまではテスト環境で成功しました。ただし、実際の環境ではExpectをインストールしないでください。
# cat .ssh/config
Host jump1-*
User ldap-user
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
ServerAliveInterval 60
ServerAliveCountMax 12
Host jump1-centos01-temporary
Hostname 13.1.2.19
Port 2222
Host jump1-centos01
Hostname 1.2.1.18
Port 22
ProxyCommand ssh -W %h:%p jump1-centos01-temporary
Host remote-host
Hostname 12.1.1.8
ProxyCommand ssh -W %h:%p jump1-centos01
User root
予測モードと転送モードを使用したSSH接続
# cat expect.sh
#!/usr/bin/env expect
set timeout 7
set date [exec date "+%d-%B-%Y"]
spawn sh -c "ssh va1ap-vsns0001n < ./isi.py > storageinfo_$date.txt"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Password:"
send "remotepass\r"
interact
答え1
ssh -t $jump1 ssh -t $jump2 ssh -t $tgt
探しているリンクを取得できます。 ptyが割り当てられていることを確認してください。 ptyは、-t
ターゲットでコマンドを実行する必要がある場合、通常は割り当てられません。ssh
この場合、プロキシとプロキシの配信は完全に適切に見えるので、次のようになります。
ssh -A -t $jump1 ssh -A -t $jump2 ssh -t $tgt
これがうまくいかない場合は、次の選択肢としてscript
使用できます。expect
一部状態。たとえば、echo $passwd | script -q -f -c "ssh -q -t $host sudo -p \"''\" \"$some_command\"
これは非対話型の目的に必要なパターンです。
ただし、現実的には、特定の種類のキーベース認証またはシングルサインオン(SSO)認証を設定しようとしています。特にテスト環境と本番環境が異なる場合は、説明するワークフローが悪夢のように聞こえます。