我能够使用Bash脚本连接到SFTP连接但想要考虑错误的连接,例如没有互联网连接,密钥文件变坏等等。
如果连接错误,有没有办法在Bash中抛出错误?如果密钥错误,SFTP
似乎会自动拒绝权限,然后关闭连接。
这在Python中可行吗?
答案 0 :(得分:0)
Bash错误非常简单:您可以在脚本中间使用返回代码退出[并在某处自行记录以便在另一个脚本中处理],或者通过if语句处理返回代码(如重试sftp命令)。
您可以使用函数并指定一组返回代码,以便在单个脚本中执行此操作。
Python是一种功能更全面的语言:如果您使用库来执行调用(例如直接创建shell命令的子进程,或者如果您通过ssh执行命令则使用paramiko)可以捕获错误更直接地使用try / except块:
try:
rc = subprocess.check_call('ssh 348.3454.342.21', shell=True) # bogus IP
except CalledProcessError, e:
print e
它输出:
ssh: Could not resolve hostname 348.3454.342.21: Name or service not known
CalledProcessError: Command 'ssh 348.3454.342.21' returned non-zero exit status 255
Paramiko将为连接失败等提供更明确的错误类型。但是,如果远程主机上出现故障,那么在远程主机上失败的paramiko运行的命令不会抛出错误。
def setup_session(server,key_filename):
paramiko.util.log_to_file('%s_paramiko.log'%(server))
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.
try:
ssh.connect(server,username='root',key_filename=key_filename)
except BadHostKeyException, e:
do_badhostkey_thing()
except AuthenticationException, e:
do_authenticationexception_thing()
except SSHException, e:
do_sshexception_thing()
return ssh