自分のデータベースにログインするには、次の手順に従います。
ssh [email protected]
password:
接続すると、同じ端末でローカルデータベースサーバーにログインします。
ssh database_name
password:
次にsuを実行します。
su - appuser
次に実際にsqlplusに接続します。
sqlplus ..
Unixスクリプトを使用してこれを自動化しようとしていますが、次のことがわかりません。
- 同じスクリプトで2つのSSHを使用する方法
- 「ssh Database_name」に進んでパスワードを入力できますが、コントロールはターミナルに戻り、残りのスクリプトは実行されません。
- 2番目のsshの後には、suコマンドを引数で始めて残りのコマンドを渡す必要があることを知っていますが、どうすればいいかわかりません。
答え1
これに対する私のアプローチは2つあります。まずssh-keygen
、コメントで@Avinashが述べた方法でSSHのパスワードなしのキーログインを設定します。次に、expect
2 つの 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の名前を短い名前に変更します。