同じスクリプトで2つのsshコマンドを使用してから、他のコマンドを引き続き使用する方法は?

同じスクリプトで2つのsshコマンドを使用してから、他のコマンドを引き続き使用する方法は?

自分のデータベースにログインするには、次の手順に従います。

ssh [email protected] 
password: 

接続すると、同じ端末でローカルデータベースサーバーにログインします。

ssh database_name 
password:

次にsuを実行します。

su - appuser

次に実際にsqlplusに接続します。

sqlplus ..

Unixスクリプトを使用してこれを自動化しようとしていますが、次のことがわかりません。

  1. 同じスクリプトで2つのSSHを使用する方法
  2. 「ssh Database_name」に進んでパスワードを入力できますが、コントロールはターミナルに戻り、残りのスクリプトは実行されません。
  3. 2番目のsshの後には、suコマンドを引数で始めて残りのコマンドを渡す必要があることを知っていますが、どうすればいいかわかりません。

答え1

これに対する私のアプローチは2つあります。まずssh-keygen、コメントで@Avinashが述べた方法でSSHのパスワードなしのキーログインを設定します。次に、expect2 つの SSH セッションを段階的に実行して開始し、sqlplus制御を端末に戻します。

答え2

このようなものとパスワードのない公開鍵認証がトリックを実行する必要があります。

# create an ssh connection for tunneling only, in the background (this assumes tunneling is allowed... usually is)
ssh -N -L 9999:database_name:22 [email protected] &
pid=$!

# connect to the 2nd machine directly, using the tunnel, also run only the sqlplus command. (this assumes sudo is installed)
ssh -oPort 9999 localhost sudo -u appuser sqlplus ..

kill $pid

最初のコマンドは ~/.ssh/config の特別な構成に置き換えることができます。例は次のとおりです。

Host mytunnel
    User unix_id
    Hostname something.com
    LocalForward 9999 localhost:22

Host sqlviatunnel
    User unix_id
    Hostname localhost
    Port 9999
    ProxyCommand ssh -q -W %h:%p mytunnel

それから

ssh sqlviatunnel

sqlviatunnelの名前を短い名前に変更します。

関連情報