最初のsshコマンドはマイコンピュータで実行され、キーパスワードを入力してサーバーにログインすると、2番目のsshコマンドが入力されます。
ssh -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000
#i get prompted for a password to use the key
ssh -D 6001 -p 6666 localhost -l dancloud
#i get prompted for a password associated with user dancloud
- これらのコマンドを1つのコマンドにまとめて同じ結果を得るにはどうすればよいですか?私はnetcatとProxyCommandがここで役に立つかもしれませんが、私はまだ理解していません。
- これら2つのパスワードをハードコードしてbashスクリプトに入れるにはどうすればよいですか?
./login.sh
スクリプトにハードコードされたパスワードを使用してこれらのコードをすべて実行し、同じ最終結果が得られることを願っています。
答え1
最初の可能性は明らかです(-t
スイッチを参照)。
ssh -t -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 \
"ssh -D 6001 -p 6666 localhost -l dancloud"
一見すると複雑に見えますが、概念的にProxyCommand
は1つだけを渡すことができます(推奨netcat
されていないバージョンであり、-W
スイッチを使用する方がエレガントです)。
Host proxy
Hostname 54.152.188.55
User admin
IdentityFile cloudkey
Host target
Hostname localhost
Port 6666
User dancloud
DynamicForward 6000
ProxyCommand ssh -W %h:%p proxy
その後、接続に使用しますssh target
(参照...今、bashスクリプトも必要ありません:))。
説明する:2番目のソケットssh
もコンピュータ上で実行されるため、動的転送ソケット(SOCKSプロキシ)がコンピュータに直接作成されます。
パスワードに関してはこれはお勧めできません(パスワードは次のようにする必要があります)。秘密)しかしそれ可能仕事用にsshpass
前面に使用する方が適していますssh
。
マニュアルページでは、スイッチについて次のようにssh
説明します-W
。
-W
host
:port
要求は、クライアントの標準入力および出力に対するセキュアチャネルを介してポートのホストに転送されます。
-N
、、、-T
およびExitOnForwardFailure
を意味しますClearAllForwardings
。プロトコルバージョン2にのみ適用されます。
と一緒に使用すると、ProxyCommand
要求された項目に接続してからhostname
(netcat
標準IOを接続して:host
)port
(パラメータ)のデフォルトの組み込みバージョンを提供します。
答え2
次のような目的を達成できるはずです。
ssh -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 -t "ssh -D 6001 -p 6666 localhost -l dancloud"
この-t
フラグは最初のシステムでpseudo-ttyを強制し、最初のシステム(この場合はsshからdancloudトンネルへ)で残りのコードを実行します。次のコマンドの場合、二重引用符はオプションです。
ssh 10.0.0.0 -t ssh 192.168.0.0
引用符は必要ありません。私はこのコマンドを毎日使用します(もちろん正しいIPを使用して)。ただし、引用符なしで失敗すると、マイルが変わる可能性があります。ちょうど追加してください;-)
スクリプトにハードコードされたパスワードの場合、これを達成するために私が考えることができる唯一の方法は、次のものを使用することです。予想されるスクリプトですが、これにはTCLコードの知識が必要です。該当するすべてのシステムで SSH 転送と鍵ベースの認証を使用するのが最善です。という簡単なプログラムを確認できます。キーホルダー$HOME/.bashrc
ファイルに以下を追加するだけです。keychain --agents ssh
キーチェーンはSSHキーを見つけ、必要に応じてSSHエージェントを作成するか、既存のエージェントを使用します。ssh
これは、複数の端末で使用する場合に便利です。
-A
鍵ベースの認証を使用するには、SSHパラメーターに以下を追加するだけです。
ssh -A -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 -t "ssh -D 6001 -p 6666 localhost -l dancloud"