lftp は sftp 接続の netrc を読み取ることができます。

lftp は sftp 接続の netrc を読み取ることができます。

SFTPを介してサーバーにいくつかのファイルをアップロードするスクリプトを作成しようとしています。対話型 lftp セッションを開き、そこにユーザー名とパスワードを提供することで、この操作を手動で実行できます。私の考えでは、台本の場合

  • (明らかな理由で)スクリプトに資格情報をハードコードしないでください。
  • コマンドラインで言及しないでください。 (私は.bash_historyに含めたいのですが、資格情報は必要ありません。)
  • lftpバウチャー.netrcなどを読んでください。

私はこれを動作させることができないようです。現在の回避策は、資格情報を解析し、.netrcそれをlftpスクリプトに追加して削除するラッパースクリプトです。これは手動で実行する手順をシミュレートしますが、既存の機能を再実装しても効果が悪いようです。これが機能している間、問題は残ります。

lftpはSFTP接続のために.netrcを読むことができますか?

もしそうなら、税関ポートが設定の一部である場合、特別な構文要件はありますか?に接続する必要があります。sftp://username:[email protected]:12322

答え1

ssh最善の方法は、手順3のようにキーペアを使用してサーバーにアクセスすることです。

  1. キーペアを作成します(まだ存在しない場合)。

    ssh-keygen -t rsa -C "" -f ~/.ssh/id_rsa
    
  2. 公開鍵をサーバーにコピーします。

    ssh-copy-id [email protected] -p 12322
    
  3. サーバーへの接続:

    lftp sftp://[email protected]:12322
    

非標準パスをキーとして使用するには!ssh-agentまたはその前にキーを追加する必要があります.ssh/config

答え2

~によるとlftpマニュアルページ~/.netrc はいサポート/ユーザーlftp

~/.netrc

FTPサーバーのデフォルトのログイン名とパスワードを取得するには、このファイルを参照してください。ユーザー名はあるがパスワードはないURLを使用している場合は、ここでもパスワードが検索されます。

この記事を読んで、カスタムポートURLを使用しても問題ありません。

答え3

私は確認できるroneo.org答えは正しいですストーリーコーダーポートの指定方法を説明する説明も有効です。

.netrc資格情報をプレーンテキストファイルに保存せずにトラフィックを暗号化する、より安全なログインオプションが必要です。

lftpでファイルを明示的に呼び出すことができる場合は、ファイルを暗号化して渡すこと.netrcができます。残念ながらそうすることはできません。.netrcgpglftpcURL

しかし、できることは、すべての接続情報(パスワードを含む)を含む暗号化されたFTP URL文字列を生成することですlftp

完全なログイン名、ポート、およびサーバーパスを持つ単一の文字列を含むプレーンテキストファイルを作成することから始めます。デフォルトではlftp、ブックマークファイル(~/.local/share/lftp/bookmarks)をエイリアスなしで使用すると、ブックマークファイルに保存されている内容が保存されます。

したがって、bookmarksファイルに次のものがある場合:

myftpserver ftp://<user>:<pass>@ftp.mysite.com:10234/path/to/files/

あなたはただ次のものを使います:

ftp://<user>:<pass>@ftp.mysite.com:10234/path/to/files/

まず、空のテキストファイルを作成します。

touch ~/.lftprc

テキストエディタを使用してファイルにftp URLを追加して、bookmarksbash履歴のパスワードを維持します。

vi ~/.lftprc

まだ設定したことがない場合は、gpg今すぐ設定してください。

gpg --full-generate-key

次に、次のコマンドを使用してファイルを暗号化しますgpg

gpg -r <GPG USER ID/EMAIL> -e ~/.lftprc

これでファイルは次のようになります~/.lftprc.gpg。作成したファイルを削除します。

rm ~/.lftprc

BashフルログインURLは、デフォルトで次のように呼び出すことができる暗号化された文字列ですgpg

lftp $( gpg --batch -q -d ~/.bookmark.gpg )

その後、別名に変換できます。

alias lftps='lftp $( gpg --batch -q -d ~/.bookmark.gpg )'

素敵に見えるので、lftpsを選択しましたが、欲しいものは何でもできます。

HOSTNAME:~ # lftps
cd ok, cwd=/path/to/files                                                                  
lftp <user>@ftp.mysite.com:/path/to/files>

私のFTPサーバーはFTPを介した明示的なTLSをサポートしているので、安全な転送のために.lftp.conf次のことを行います。

set ssl-allow true
set ssl:ca-file "/var/lib/ca-certificates/ca-bundle.pem"
set ftp:ssl-force true

だから最終的に私はlftpがどのようにユーザーのパスワードをサーバーに渡すのか、そしてあなたがそれを理解できるかどうか知りたいのですが...

答え4

資格情報をに保存できます~/.netrc。ファイルは次のようになります。

machine ftp.cluster.host.net (do not include 'sftp://' here)
login yournickname
password xFrPkIB8767

これで接続できます

lftp sftp://[email protected]/

ニックネームは必須ですが、パスワードはニックネームから抽出されます.netrcターミナル記録が綺麗です!

あなたもできますコマンドを直接渡す到着lftp:

lftp -c "open sftp://[email protected]; ls"

スクリプトやbashエイリアスに非常に便利です!

関連情報