Tôi đang cố chạy lệnh scp
(bản sao bảo mật) bằng cách sử dụng subprocess.Popen
. Đăng nhập yêu cầu tôi gửi mật khẩu:Gửi mật khẩu qua SSH hoặc SCP với tiến trình con.Popen
from subprocess import Popen, PIPE
proc = Popen(['scp', "[email protected]:/foo/bar/somefile.txt", "."], stdin = PIPE)
proc.stdin.write(b'mypassword')
proc.stdin.flush()
này ngay lập tức trả về một lỗi:
[email protected]'s password:
Permission denied, please try again.
Tôi nhất định mật khẩu là chính xác. Tôi dễ dàng xác minh nó bằng cách thủ công gọi scp
trên vỏ. Vậy tại sao điều này không hiệu quả?
Lưu ý, có rất nhiều câu hỏi tương tự như sau, hỏi về subprocess.Popen
và gửi một mật khẩu cho SSH tự động hoặc FTP đăng nhập:
How can I set a users password in linux from a python script?
Use subprocess to send a password
Câu trả lời (s) cho những câu hỏi don' t làm việc và/hoặc không áp dụng vì tôi đang sử dụng Python 3.
Tôi không quen với mã này nhưng bạn cố gắng sử dụng tham số -p? cũng là một trao đổi quan trọng như một phương pháp xác nhận? – diego2k
Với -pi có nghĩa là "-p mypassword [email protected]: /foo/bar/somefile.txt" tôi không biết nếu bạn có thể làm điều đó – diego2k
@ diego2k Theo như tôi biết, scp không chấp nhận chuyển sang nhập mật khẩu qua dòng lệnh (trang của nó không chứa gì cả). Nói chung nó không phải là thực hành tốt để cung cấp một mật khẩu trên dòng lệnh bởi vì đó sẽ được ghi lại trong .bash_history – entropy