如何避免多个ssh联系远程?

时间:2017-01-19 12:46:23

标签: python bash shell ssh scp

ssh researcher@192.168.1.1 'ls somefile' > folders.txt
echo "Trying to connect and show files from Remote"
scp researcher@192.168.1.1:somefile somefile

从代码我们可以看到iam使用ssh会话首先查找所有文件,然后再建立另一个ssh会话来下载文件。忽略任何内容或语法错误(我已经替换了一些机密信息)。

因此,每当我尝试连接到遥控器时,它会向我询问密码,此过程单独需要3-4秒,而我的脚本有4个ssh调用,这需要花费很多时间。所以不是连接4次,而是有一种方法,所以我只能连接一次并保持会话和剩下的电话。

帮我提出建议。

1 个答案:

答案 0 :(得分:0)

有时,合法地需要打开多个连接,无论是顺序还是并行。对于这些情况,您可以在主模式下运行一个ssh,这将建立连接,并在控制模式下运行其他模式,其中"搭载"在第一个连接上,避免再次进行身份验证。

# * -M puts the connection in master mode
#
# * ControlPersist keeps the connection alive after the current client
#   exits, for use by other clients
#
# * ControlPath specifies the socket to use. %C expands to a combination
#   of the local and remote host names, the user id, and the port.
#   It should be in a directory writeable only by you, but for this
#   example we just put it in the current directory. The same socket
#   is used by each client wishing to piggyback on the open connection.

ssh -M -o ControlPersist=yes -o ControlPath=%C researcher@192.168.1.1  ls somefile > folders.txt

scp -o ControlPath=%C researcher@192.168.1.1:somefile somefile
# -O simply sends a command to the master connection, in this case
# closing it.
ssh -o ControlPath=%C -O exit researcher@192.168.1.1  # end the session

您可以通过向.ssh/config文件添加适当的选项而不是在命令行上重复它们来自动执行大量此操作。有关详细信息,请参阅Control*中的各种man ssh_config选项。