使用特定IP源的Python Paramiko SSH脚本

2024-06-16 14:41:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前写的这个脚本很好,但是有一个限制, 我无法决定哪个源IP可以使用服务器打开SSH。 对于具有多个接口的路由器,它将非常有用。 我读到sockchannel可以使用,但是 我不知道如何实现它们,也找不到示例

谢谢

from junos import Junos_Context
import paramiko
from datetime import datetime
import jcs

user = Junos_Context['user-context']['login-name']
hostname = Junos_Context['hostname']
now = datetime.now()
day = now.strftime('%Y%m%d')
hour = now.strftime('%H%M%S')

#Sets up the ssh session and logs in as login "simone" with password "simone"
#to host '192.168.2.2' 

host = '192.168.2.2'
login = 'simone'
passw = 'simone'

try:
   ssh = paramiko.SSHClient()
   ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
   ssh.connect(host, username=login, password=passw, look_for_keys=False, allow_agent=False)
  chan = ssh.invoke_shell()
except:
   print "Login to %s failed" % (host,)
   chan = False

if chan:
   sftp = ssh.open_sftp()
   sftp.put('/config/juniper.conf.gz',
  '/simone/backups/%s_%s_%s_%s_juniper.conf.gz' % (user,hostname,day,hour))

   sftp.close()
   ssh.close()

   print "All it's OK %s ! " % (user,)

else:
   print "Sorry, there is no connection to the host %s" % (host,)

Tags: toimportfalsehostparamikodatetimecontextlogin
2条回答

好了,现在它工作了! 非常感谢! 我的剧本最后是:

sok = socket.socket()
sok.bind((local_address, 0))
sok.connect((host, 22))

ssh.connect(host, username=login, password=passw, look_for_keys=False, allow_agent=False, sock=sok)

使用^{}sock参数提供绑定到所选源地址的自定义套接字。基于Can Python select what network adapter when opening a socket?,这应该做到:

import socket
s = socks.socket()
s.bind((local_address, 0))
s.connect((host, 22))
ssh.connect(
    host, username=login, password=passw, look_for_keys=False, allow_agent=False, sock=s)

相关问题 更多 >