scpを使用しているときにリモートパスのオートコンプリートを有効にする方法


37

私はファイルをラップトップにリモートでコピーしました:

scp someFile USER@192.168.178.32:/home/USER/put/it/some/where/oh/damn/you/here

タブを押すことでリモートパスを自動補完できるようにしたい。


1
のために有効になってrsync私の意見でよりはるかに優れている、scp
マルコケッピ

3
でデフォルトで有効になっていますzsh
ステファンギメネス

3
またscp、少なくともここで動作します。ssh-agentに既に追加されているssh-keyが必要です。
enzotib

回答:


24

派手なオートコンプリートをオンにしていることを確認してください。多くのディストリビューションでは、これは~/.bashrcを含む必要があることを意味します. /etc/bash_completion

パスワードなしの認証を設定する必要があります。つまり、に既に読み込まれているキーを使用しssh-agentます。

SSH接続の確立は遅いため、一度だけすべての接続を確立し、その後その接続を使用することにより、完了を大幅に高速化できます。これを行う比較的複雑な方法は、でssh -N -M target-hostマスター/スレーブ接続を設定した後にマスターSSH接続を開くことです~/.ssh/config。手順については、1つのコマンド複数のsshセッションを参照してください(ControlMasterControlPathオプションが必要です)。

簡単な方法は、リモートファイルシステムをSSHFS経由でマウントして使用することですcp通常のシェル補完ですることです。

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here

/etc/bash_completionソースに何かがあるように見えます~/.bash_completion。私はに書き込むことはできません、リモートサーバー上でこの機能を持ってできるようにしたい/etc/と何もありません/etc/bash_completionありますが(は/etc/bash_completion.d/。私のホームディレクトリから実行しても安全だろうバージョンはありますか?に少なくとも一つの基準があります〜/ .bash_completion私はもっと私が欠けているがあり、かもしれない原因の誤差は周期的なループまたは何か他のものがあるかもしれない怖いので。
redbmk


2

scpを使用する代わりにlftpに切り替えることができます。ftp、sftp、およびsshを介したファイル転送用の一貫性のある優れたインターフェースを提供し、探しているオートコンプリート(ワイルドカードなど)を含みます。

lftp fish:// user @ machine

scpで上記のようにssh経由で接続を開きます。多くのマシンはsftp://もサポートしていますが、これは私の経験ではさらに優れています。


0

@Gilesが言ったように、マシンのsshキーが正しく設定されていることを確認してください。

この構成を追加する~/.ssh/configと、速度に大きな違いが生じました。

Host *
 ControlMaster auto
 ControlPath ~/.ssh/master-socket/%r@%h:%p
 ControlPersist 10s

これにより、各ホストのマスター接続が作成されます。

10秒持続すると、接続が自動的に閉じられる前にディレクトリを確認する時間が与えられます。

永続化しないと、接続を再作成する必要があり、タブの完了が遅くなります。

~$ scp mymachine:~/pa タブ

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to タブ

~$ scp mymachine:~/path/to/file タブ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.