どうすれば多くの結果が得られますか?
scp ~/here/is/one me@remote:~/where/it/goes
scp ~/yet/another me@remote:~/the/second/place
scp ~/the/number/three/one me@remote:~/foo/bar/qux
リモートユーザーのパスワードは一度だけ入力できますか?
答え1
OpenSSHでは、初めて実行する「メインモード」を使用でき、ssh
接続を確立して認証し、接続をアクティブに保ち、追加の指示を待っている間にバックグラウンドに配置されます。この背景接続はUNIXソケットの命名これはssh
意図的に独自のコンテキストプロセスによって生成されます。したがって、scp
最終的に明示的に閉じるまで、独自の新しい接続を確立するのではなく、これらのバックグラウンド接続を使用するようにコマンドに指示します。
bgconn
たとえば、次の例では、現在のディレクトリにあるランダムに名前が付けられたファイルのUNIXソケットを介してバックグラウンド接続が使用されます。
ssh -fMNS bgconn -o ControlPersist=yes me@remote
scp -o ControlPath=bgconn ~/here/is/one me@remote:~/where/it/goes
scp -o ControlPath=bgconn ~/yet/another me@remote:~/the/second/place
scp -o ControlPath=bgconn ~/the/number/three/one me@remote:~/foo/bar/qux
ssh -S bgconn -O exit -
最初はssh
接続を確立し、最後は単に最初に接続を終了して終了するように指示します。この場合、bgconn
ソケットファイルも削除されます。その間のコマンドは、名前付きUNIXソケット(したがって確立された接続)にそのファイルをコピーするために使用されるように指示します。上記の例のように名前付きソケットを使用するように指示した場合は、同じバックグラウンド接続を使用して必要な数のコマンドをscp
実行できます。ssh
sftp
ssh
特に、最初のオプションで使用されたオプションは次のとおりです。
-f
認証成功後にssh
バックグラウンドに切り替える-M
マスターモードの有効化-N
リモートコマンドを要求しないでください。それ以外の場合は、デフォルトの動作(この場合は意味なし)はリモートシェルとして実行されます。-S
ファイルシステムに生成されるUNIXソケット名のパス-o ControlPersist=yes
明示的に閉じるまでバックグラウンドssh
プロセスが持続するようにします。それ以外の場合は、最初の操作の終わりにそれ自体が終了します。
OpenSSH「基本モード」の仕組み:
SSHプロトコル自体は複数いわゆる「チャンネル」SSH接続を共有します。これらの各チャネルは、ターミナルセッション、リモートコマンド、ポート転送など、SSHでサポートされているサービスの1つを表します。これはデフォルトでポート転送を要求できる基盤です。~と一般的な端末セッション。
OpenSSHのクライアントコマンドは、ssh
上記のように「メインモード」を介して接続共有機能を外部アプリケーションに慎重にエクスポートします。より正式な説明はここにあります。
答え2
SSHファミリでは、パスワードを複数回入力したくない場合は、SSHキーを使用する必要があります。
これは他のホストによって生成され、ssh-keygen
他のホストに送信されますssh-copy-id
(公開鍵のみが送信されます)。
鍵が暗号化されていない場合、パスワードは要求されません。
ファイルのプライベート状態(攻撃...)を信頼していない場合は、鍵を暗号化できますssh-keygen -p
。
暗号化キーを使用するとパスワードの入力を求められますが、有効にすることができますeval $(ssh-agent)
。エージェントは、ユーザーが入力したとおりにキーをメモリに保存できますssh-add
。その後、パスワードは一度だけ要求され、ssh-add
そのキーはssh / scpに使用できます。
これ以上プロキシが必要ない場合ssh-agent -k
。