scp 许多文件,无需重新输入密码,所有不同的路径

scp 许多文件,无需重新输入密码,所有不同的路径

我怎样才能实现许多的结果

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不要请求任何远程命令,否则它将按照默认行为执行(在这种情况下毫无意义)远程 shell
  • -S将在文件系统上创建的 UNIX 套接字名称的路径
  • -o ControlPersist=yes使后台ssh进程持续存在直到显式关闭,否则它将在第一个操作结束时自行退出

OpenSSH“主模式”的工作原理:

SSH 协议本身允许多个所谓的“渠道”共享一个 SSH 连接。每个这样的通道代表 SSH 支持的服务中的一项服务,例如终端会话、远程命令、端口转发等。这本质上是可以请求端口转发的基础和...一起典型的终端会话。

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.

相关内容