web-dev-qa-db-ja.com

SSH:SSHサーバー上のシェルなしのトンネル

2つのホスト間にトンネルを設定する必要があります。

このため、私はsshを次のように使用します:

ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

その後、SSH_SERVERにログインします。

この機能を回避するにはどうすればよいですか?トンネルを設置するだけです。 SSH_SERVERにログインする必要はありません...

-Nオプションを試しましたが、シェルがビジー状態のままでした。

77
Bau Miao

他の投稿で述べたように、リモートホストでプロンプトを表示したくない場合は、SSHの-Nオプションを使用する必要があります。しかし、これはプロンプトなしでSSHを実行し続け、シェルをビジー状態にします。

&記号を使用して、SSHをバックグラウンドタスクとして配置するだけです。

ssh -N -L 8080:ww.xx.yy.zz:80 user@server &

これにより、バックグラウンドでSSHトンネリングが起動します。ただし、特に非リスニングポートに接続しようとすると、メッセージが表示される場合があります(サーバーのApacheが起動されていない場合)。他のことをしているときにこれらのメッセージがシェルで生成されるのを防ぐには、STDOUT/STDERRを大きなvoidにリダイレクトします。

ssh -N -L 8080:ww.xx.yy.zz:80 user@server >/dev/null 2>&1 & 

SSHを楽しんでください。

81
Adrien M.

-f -Nはあなたが探しているものです:

ssh -f -N -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

ssh manページ から:

-fコマンド実行の直前にバックグラウンドに移動するようにsshに要求します。これは、sshがパスワードまたはパスフレーズを要求するが、ユーザーがバックグラウンドでそれを望んでいる場合に役立ちます。これは-nを意味します。

-Nリモートコマンドを実行しません。これは、ポートを転送するだけの場合に便利です(プロトコルバージョン2のみ)。

-nstdinを/dev/nullからリダイレクトします(実際には、stdinからの読み取りを防ぎます)。これは、sshがバックグラウンドで実行されている場合に使用する必要があります。

61
neu242