回答:
私はこれが遅い回答であることを知っていますが、これを行うためのクールな方法を見つけました。それは基本的にホルガージャストの答えですが、保存された構成ファイルに:
これ~/.ssh/config
をlocal.machineのファイルに配置する必要があります(ファイルが存在しない場合は作成します)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh proxyuser@proxy.machine nc %h %p 2> /dev/null
ファイルを保存した後、使用することができます
ssh target.machine
接続したいときはいつでも。ssh構成ファイルも尊重するため、Scpも機能します。GNOMEを使用していてGUIを使用したい場合は、Nautilusも同様です。
Host proxy.machine
同じ~/.ssh/config
ファイル内の行も表示すると役立ちます、2)これらのコマンドをネストできるかどうかを示します(つまり、クライアントが接続するプロキシホスト2に接続するプロキシホスト1に接続します)。 ..target)および3)nc %h %p
意味
どこでも必要なく 、これをワンライナーとして実行できます* nc
。
scp -o "ProxyCommand ssh pcreds@proxy.machine -W %h:%p" tcreds@target.machine:file .
説明
pcreds
そしてtcreds
、あなたのプロキシを表しており、必要に応じて(資格情報をターゲットusername
、username:password
など)。
これは、組み込みのnetcatのような機能により可能nc
になり、中間ホストでの要件がなくなります。を使用ssh -W host:port
すると、指定されたホストとポートへのトンネルが設定され、それがstdin / stdoutに接続さscp
れ、トンネルを介して実行されます。
指定したターゲットホストとポートに置き換えられます。%h
%p
ProxyCommand
さらに便利なように、ssh構成でプロキシを構成できます。
Host target.machine
ProxyCommand ssh pcreds@proxy.machine -W %h:%p
そしてそれから
scp tcreds@target.machine:file .
* OpenSSH 5.4以降- 2010年3月にリリース
-p <portnum>
前に、-W
プロキシポートを指定する方法のいずれかで
ワンライナー?私の頭の上ではありません。最初にプロキシを確立する必要があり、scpだけではプロキシを確立できません。
手動で行う場合、トンネルのスクリーンセッションを開きます。
screen -S tunnel
画面は、トンネルをバックグラウンドシェルに保持するために使用されます。バックグラウンドでトンネルを開いたままにするための任意の手法を使用します(@weeheavyの答えはおそらく最も簡単です)。スクリーンセッションに入ったら、次のようにトンネルを開始します
ssh -L 2222:target.machine:22 [user@]proxy.machine
これを分解するには、基本的に「ローカルマシンでポート2222を開くと、localhost:2222にアクセスする接続はproxy.machineを介してtarget.machine:22にプロキシされます」
ssh接続とトンネルが確立されたら、「Ca d」を使用して画面セッションから切り離します。そのスクリーンセッションに戻るには、次を入力します。screen -raAd tunnel
元のシェルに戻ると、scpコマンドは次のようになります。
scp -P 2222 localhost:your/file/on/target.machine local/path
localhostポート2222は、実際にはtarget.machineに向かう単なるトンネルであることに注意してください。
scpはsshのように「-o」オプションをサポートしているように見えますが、プロキシユーザー名/パスワードを渡す方法がわかりません。
scp -o "ProxyCommand=nc -X connect -x proxyhost:proxyport %h %p" remote_user@remote_host:remote_path local_path
表示される場合nc: invalid option -- X
はhttps://stackoverflow.com/a/23616021/32453を参照してください
どうですか:
scp -o "ProxyCommand ssh user@myproxyserver.com nc %h %p" your.filename username@yourdestination.yourdomain.com:/whatever_location
次のようなものを試すことができます:
ssh user@proxy.machine "ssh user@target.machine 'cat > file'" < file
しかし、proxy.machineがパスワードを要求する必要がある場合は機能しません(SSHはTTYにないため、askpassは失敗します)。
複数のファイルがある場合は、次のようなtarを使用できます(テストされていない、通常はそのようにnetcatを使用します)。
tar cf - file1 file2 folder1/ | ssh user@proxy.machine "ssh user@target.machine 'tar xvf -'"
別の簡単な解決策を転送するためのsource_fileをからsource_hostこのにdestination_host経由PROXY_HOST:
proxy_serverにログインします。
ssh login@proxy_host
プロキシサーバーから、source_fileをsource_hostからdestination_hostに転送します(\
以下に示すように、これを1行として入力するか、を省略して、または2行として入力できます)。
scp login@source_host:/path_to_source_file \
login@destination_host:/path_to_destination_directory
これには、source_hostからproxy_hostへのログインにrsa_keyを使用する必要があります。