我正在从paramiko github的 demo 文件夹中运行 demo_sftp.py 文件。我在 PyDev 中单步执行它并预计会出现错误,因为我没有尝试连接的服务器的密钥,但我收到打印语句说脚本无法打开主机密钥文件然后它继续进行并进行了获取和放置。
这是一个代码片段。
try:
host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
except IOError:
try:
# try ~/ssh/ too, because windows can't have a folder named ~/.ssh/
host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/ssh/known_hosts'))
except IOError:
print '*** Unable to open host keys file'
host_keys = {}
if host_keys.has_key(hostname):
hostkeytype = host_keys[hostname].keys()[0]
hostkey = host_keys[hostname][hostkeytype]
print 'Using host key of type %s' % hostkeytype
# now, connect and use paramiko Transport to negotiate SSH2 across the connection
try:
t = paramiko.Transport((hostname, port))
t.connect(username=username, password=password, hostkey=hostkey)
sftp = paramiko.SFTPClient.from_transport(t)
# dirlist on remote host
dirlist = sftp.listdir('.')
print "Dirlist:", dirlist
我真的希望它会转到 t.connect 行上的 except,因为 hostkey 是 NoneType。
当我打开一个 ssh 连接时
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect('.'.join([self.name, self.domain]),
username=self.username, password=self.password)
stdin, stdout, stderr = ssh.exec_command("ps aux | grep Xvnc | wc -l")
我必须有 AutoAddPolicy() 行,否则它会失败。那么有什么区别呢?显然我只是在学习这个,但我认为 sftp 会像 ssh 一样严格。