如何從 curl (git-ftp) 和 FileZilla 連接到 vsftpd?
按照本教程,我設法將 FTPS 連接添加到伺服器。
按照教程中的第 6 步:
- 6.1 生成證書
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
- 6.2 添加證書到
/etc/vsftpd.conf
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
它適用於 FileZilla 但使用 curl 似乎我無法重複使用相同的證書,我從伺服器下載了證書文件並像這樣使用它
$ curl -v --cert ~/.ssh/vsftpd.pem --user MYUSER:PASSWORD ftp://SERVER-IP * Trying SERVER-IP... * TCP_NODELAY set * Connected to SERVER-IP (SERVER-IP) port 21 (#0) < 220 (vsFTPd 3.0.3) > USER MYUSER < 530 Non-anonymous sessions must use encryption. * Access denied: 530 * Closing connection 0 curl: (67) Access denied: 530
使用 FTPS
$ curl -v --cert ~/.ssh/vsftpd.pem --user MYUSER:PASSWORD ftps://SERVER-IP * Trying SERVER-IP... * TCP_NODELAY set * Connection failed * connect to SERVER-IP port 990 failed: Connection refused * Failed to connect to SERVER-IP port 990: Connection refused * Closing connection 0 curl: (7) Failed to connect to SERVER-IP port 990: Connection refused
如何為 FileZilla 和 curl 使用相同的證書(因為 git-ftp 使用 curl)通過 FTPS 上傳文件?
更新
添加參數
--ftp-ssl
:* Trying SERVER-IP... * TCP_NODELAY set * Connected to SERVER-IP (SERVER-IP) port 21 (#0) < 220 (vsFTPd 3.0.3) > AUTH SSL < 234 Proceed with negotiation. * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /usr/local/etc/openssl/cert.pem CApath: /usr/local/etc/openssl/certs * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS alert, unknown CA (560): * SSL certificate problem: self signed certificate * Closing connection 0 curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.haxx.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
curls 參數
--cert
用於提供客戶端身份驗證證書。只要您不使用客戶端證書進行身份驗證,就不需要它。要使用 ftps,請使用該
--ftp-ssl
參數。
由於 macOS 上的 curl 使用 Keychain Access 應用程序上的數據庫,因此說明與 Linux 所需的說明不同,我在此處記錄了說明
在 macOS 客戶端上使用 git-ftp,在 Linux 伺服器上使用 vsftpd
生成 SSL 證書和密鑰
$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ~/.ssh/vsftpd.key -out ~/.ssh/vsftpd.crt
將生成的證書添加到 Keychain Access 應用程序
$ security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.ssh/vsftpd.crt
將證書和密鑰上傳到伺服器並將文件複製到
/etc/ssl/private/
按照此處描述的步驟,在第 6 步中使用已生成的證書而不是生成新的證書
rsa_cert_file=/etc/ssl/private/vsftpd.crt rsa_private_key_file=/etc/ssl/private/vsftpd.key
伺服器上執行 vsftpd 後,安裝 git-ftp
$ brew install git-ftp
使用 ftpes 為協議添加伺服器設置
$ git config git-ftp.url "ftpes://<SERVER-IP>/path/to/repository/" $ git config git-ftp.user "<FTP-USER>" $ git config git-ftp.password "<FTP-PASSWORD>" $ git config git-ftp.cacert "~/.ssh/vsftpd.crt"
初始化git-ftp,這種情況下會在初始化過程中上傳repository
$ git ftp init -v
將其他送出添加到儲存庫後,將更改推送到 ftp 儲存庫
$ git ftp push -v