在我与我的教授的工作中,我必须ssh到我们的服务器,然后从那里我进入每个节点来运行我们的程序.我正在尝试编写一个python程序,它将让我从本地计算机上执行远程节点上需要执行的所有操作.我将在节点上运行的命令是:
现在我在我的本地机器上创建我的输入文件,将它们scp到服务器,然后我将文件复制到每个节点并在每个节点上运行我们的fluid_dynamics程序.然后我反过来将输出恢复到我的本地机器.
我正在看paramiko,但我无法弄清楚如何使用它从我的本地机器到节点,因为我必须通过服务器.local -ssh - > server -ssh - > nodes
有没有办法在python中执行此操作,或者我应该尝试其他方法,如:using:
os.system(ssh -t server ssh node 'command')
Run Code Online (Sandbox Code Playgroud)
或者在服务器上为每个不同的命令(compile.sh,move_inputs.sh,retrieve_outputs.sh)创建一个bash脚本,然后只连接到服务器并运行bash脚本.
对不起,如果这没有意义或措辞不当,任何帮助表示赞赏.
附加信息:我使用python的原因是因为我希望程序能够生成输入文件,将它们发送到节点并检索输出文件,并最终生成我们数据的图形.我已经有了一些代码来生成输入文件并从输出中生成图形.
通过我的同事的技巧,您可以直接从本地到节点ssh/scp.
编辑你的〜/ .ssh/config:
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
Host node1 node2 or node*
ProxyCommand ssh server 'nc -w 5 %h 22'
Run Code Online (Sandbox Code Playgroud)
玩得开心!
你可以用 Paramiko 做到这一点:
proxy_command = 'ssh -i %s %s@%s nc %s %s' % (proxy_key, proxy_user, proxy_host, host, 22)
proxy = paramiko.ProxyCommand(proxy_command)
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=user, password=password, sock=proxy)
stdin, stdout, stderr = client.exec_command('echo HELLO')
print "Echo: %s" % (", ".join(stdout.readlines()))
client.close()
Run Code Online (Sandbox Code Playgroud)
它也适用于SFTPClient:
proxy_command = 'ssh -i %s %s@%s nc %s %s' % (proxy_key, proxy_user, proxy_host, host, 22)
proxy = paramiko.ProxyCommand(proxy_command)
transport = paramiko.Transport(proxy)
transport.connect(username=user, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6188 次 |
| 最近记录: |