tôi đang thử nghiệm với hướng dẫn này để thiết lập máy chủ FTP trên phiên bản Ubuntu 20.04 và xem liệu tôi có thể đẩy tệp CSV tới máy chủ đó từ phiên bản Windows 10 bằng Python hay không.
Về phía linux, tôi có các cài đặt chính xác như các trạng thái hướng dẫn khi thực hiện sửa đổi tệp cấu hình vsftd bằng nano:
lắng nghe = KHÔNG
nghe_ipv6=CÓ
nặc danh_enable=KHÔNG
local_enable=CÓ
write_enable=CÓ
dirmessage_enable=CÓ
use_localtime=CÓ
xferlog_enable=CÓ
connect_from_port_20=CÓ
chroot_local_user=CÓ
safe_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=CÓ
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=CÓ
userlist_file=/etc/vsftpd.user_list
userlist_deny=KHÔNG
Ở phía máy khách là máy Windows 10 trên mạng LAN với phiên bản Ubuntu, tôi có tệp Python này để thử và đẩy tệp CSV sang máy chủ FTP chạy trên phiên bản Ubuntu. Tôi gần như không biết những gì tôi sẽ sử dụng để xác thực máy chủ FTP cũng như số cổng để chỉ định rằng máy chủ FTP đang chạy.
Python 3.9 từ Windows 10:
từ ftplib nhập FTP
FTP_HOST = "192.168.0.105"
#FTP_PORT = 7021
FTP_USER = "bến"
FTP_PASS = "bến"
print("Tôi đang làm việc...")
ftp = FTP()
#ftp.connect(FTP_HOST, FTP_PORT)
ftp.connect(FTP_HOST)
ftp.login(FTP_USER, FTP_PASS)
# tên tệp cục bộ bạn muốn tải lên
tên tệp = "madison_office_2020.csv"
với open(filename, "rb") dưới dạng tệp:
ftp.storbinary(f"STOR {tên tệp}", tệp)
ftp.quit()
Trong tập lệnh Python, tôi có số cổng được nhận xét và tên người dùng/mật khẩu là người dùng Người dùng Ubuntu Linux hiện đang chạy trên phiên bản Linux. Bất kỳ mẹo nào được đánh giá cao, đây là dấu vết gần giống như lỗi quyền đối với tệp hoặc thư mục. Bất kỳ mẹo nào đánh giá cao sự khôn ngoan của Linux ở đây về cách xác minh quyền truy cập tệp.
Traceback (cuộc gọi gần đây nhất cuối cùng):
Tệp "C:\Users\bbartling\Desktop\ftp_client\client_side_push.py", dòng 20, trong <module>
ftp.storbinary(f"STOR {tên tệp}", tệp)
Tệp "C:\Python39\lib\ftplib.py", dòng 498, trong storbinary
với self.transfercmd(cmd, rest) dưới dạng kết nối:
Tệp "C:\Python39\lib\ftplib.py", dòng 393, trong transfercmd
trả lại self.ntransfercmd(cmd, phần còn lại)[0]
Tệp "C:\Python39\lib\ftplib.py", dòng 359, trong ntransfercmd
resp = self.sendcmd(cmd)
Tệp "C:\Python39\lib\ftplib.py", dòng 281, trong sendcmd
trả về self.getresp()
Tệp "C:\Python39\lib\ftplib.py", dòng 254, trong getresp
tăng error_perm(resp)
ftplib.error_perm: 550 Quyền bị từ chối.
Một lưu ý cuối cùng là thư mục này tồn tại. /var/run/vsftpd/trống
Tôi chỉ không biết cách kiểm tra quyền của người dùng đối với thư mục này. Hãy thử điều này bên dưới, tôi có thể còn làm nó thậm chí còn tồi tệ hơn, không có nhiều sự khôn ngoan ở đây, bất kỳ lời khuyên nào cũng được đánh giá cao:
sudo chown -R ben: /var/run/vsftpd/empty
sudo chown -R ben /var/run/vsftpd/empty
sudo chown -R 755 /var/run/vsftpd/empty
Bây giờ nếu tôi thử và kiểm tra quyền, không chắc đây có phải là cách đúng không chỉ với ls -al
cái này sẽ cho tôi ls: không thể mở thư mục '.': Quyền bị từ chối