web-dev-qa-db-ja.com

scpの使用時にリモートパスのオートコンプリートを有効にする方法は?

次のコマンドを使用して、ラップトップにファイルをリモートコピーしました。

scp someFile [email protected]:/home/USER/put/it/some/where/oh/damn/you/here

タブを押してリモートパスをオートコンプリートできるようにしたい。

39
k0pernikus

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

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

SSH接続の確立には時間がかかるため、接続を一度だけ確立し、その後その接続を使用することで、完了までの時間を大幅に短縮できます。これを行うための比較的複雑な方法は、ssh -N -M target-Hostでマスター/スレーブ接続をセットアップした後、~/.ssh/configでマスターSSH接続を開くことです。手順については 1つのコマンドでの複数のsshセッション を参照してください(ControlMasterおよびControlPathオプションが必要です)。

簡単な方法は、リモートファイルシステムを [〜#〜] sshfs [〜#〜] にマウントし、通常のシェル補完でcpを使用することです。

mkdir ~/remote
sshfs [email protected]:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here

私がしなければならないことは、リモートマシンに公開鍵を追加することだけでした。

cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

そして、今はscpタブ補完です。

最初にキーを設定する必要がある場合は、こちらをご覧ください。

8
k0pernikus

Scpを使用する代わりにlftpに切り替えることができます。探しているオートコンプリートやワイルドカードなど、ftp、sftp、ssh経由でファイルを転送するための一貫した素敵なインターフェースを提供します。

lftp fish:// user @ machine

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

2
fschmitt

@Gilesには said があるように、自動補完が適切に設定されていることを確認し、マシンに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[〜#〜]タブ[〜#〜]

1
Harry