我怎样才能达到许多的结果
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
只为该远程用户输入一次密码?
我怎样才能达到许多的结果
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
只为该远程用户输入一次密码?
使用 OpenSSH,您可以使用它的“主模式”,您首先运行一个
ssh
只会建立连接并进行身份验证的程序,然后将其置于后台,直到您明确关闭它。例如:
-f
ssh
认证成功后放置到后台-M
启用主模式-N
不要为后台进程请求任何远程ssh
命令-S
将在文件系统上创建的 UNIX 套接字名称的路径;稍后可以通过其他命令或命令ssh
随意scp
使用它sftp
-o ControlPersist=yes
使后台ssh
进程持续存在,直到明确关闭然后为每个
scp
命令指定-o ControlPath=<path-to-UNIX-socket-on-file>
选项。最后,关闭后台
ssh
进程。OpenSSH“主模式”如何在幕后工作的概述:
SSH 协议本身允许多个所谓的“通道”共享一个 SSH 连接。每个这样的通道代表 SSH 支持的服务中的一项服务,例如终端会话、远程命令、端口转发等。这基本上是可以请求端口转发以及典型终端会话的基础。
OpenSSH客户端命令也通过其“主模式”
ssh
礼貌地向外部应用程序提供这种连接共享功能。主模式临时在文件上创建一个由命令行或配置选项命名的 UNIX 套接字。文件中的这个 UNIX 套接字是临时的,因为它的进程将在退出时将其删除。ssh
-S
ControlPath
ssh -M
这样的 UNIX 套接字可以被任意(显然仅限本地)应用程序联系,这些应用程序能够使用专用的 OpenSSH“多路复用协议”,这是一个大大简化的协议,因此编写程序确实非常容易(使用具有 UNIX 套接字功能的语言)连接到文件上的套接字并动态地向其已经运行的
ssh -M
进程请求操作,例如新的 tty 会话、端口转发等。当然
ssh
,scp
, 和sftp
他们自己能够使用该多路复用协议,您只需要使用我在上面的示例中指出的专用选项来指示他们这样做。ssh
在可以通过该多路复用协议向主模式请求的操作(终端会话、端口转发等)中,自然exit
也有指示主模式ssh
断开连接并退出的操作。我的示例中的最后一个ssh -O exit
命令只是向主模式发出该操作,ssh
该主模式正在侦听特定的 UNIX 文件上的套接字。使用 SSH 套件,如果您想避免多次输入密码,您应该使用 ssh 密钥。
它们由 生成
ssh-keygen
,可以发送到另一台主机ssh-copy-id
(仅发送公钥)。如果密钥未加密,则不询问密码。
如果您不信任文件的私有状态(攻击……),您可以将密钥加密
ssh-keygen -p
。使用加密密钥时,会询问密码,但您可以启动
eval $(ssh-agent)
. 当您键入 时,该代理可以将密钥存储在内存中ssh-add
。然后密码只被询问一次ssh-add
并且密钥可用于 ssh/scp。当您不再需要代理时,
ssh-agent -k
.