0
我能夠連接到一個Bash腳本的SFTP連接,但想要解釋不好的連接,比如沒有互聯網連接,密鑰文件不好等。在Bash中,如果SFTP連接未建立,是否可能引發錯誤?
有沒有辦法拋出一個錯誤在Bash中,如果我的連接不好?似乎SFTP
自動拒絕權限,如果關鍵是壞的,然後關閉連接。
在Python中這可能嗎?
我能夠連接到一個Bash腳本的SFTP連接,但想要解釋不好的連接,比如沒有互聯網連接,密鑰文件不好等。在Bash中,如果SFTP連接未建立,是否可能引發錯誤?
有沒有辦法拋出一個錯誤在Bash中,如果我的連接不好?似乎SFTP
自動拒絕權限,如果關鍵是壞的,然後關閉連接。
在Python中這可能嗎?
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
你想在錯誤上發生什麼?在Bash中,如果發生錯誤,SFTP命令將返回一個非零的退出代碼。你可以在命令後用Bash變量'$?' – Ben
使用'paramiko'來檢查它,這將是可能的 – taesu
我會考慮使用'lftp',它實際上支持sftp(以及scp和甚至通過SSH連接將文件傳輸到符合POSIX標準的shell!),並且(2)同樣將有用的退出代碼報告給調用shell。 –