2017-12-26 44 views
1

次のコマンドを1つのコマンドに組み合わせる方法はありますか?私は各コマンドごとに毎回ログインしたくない。シェルスクリプトでsshコマンドとscpコマンドを組み合わせる

sshpass -p 'somepwd' ssh [email protected] "mkdir -p /home/user/test" 
sshpass -p 'somepwd' scp file.sh [email protected]:/home/user/test 
sshpass -p 'somepwd' scp /test/somefile.txt [email protected]:/home/user/test 
sshpass -p 'somepwd' ssh [email protected] -C "cd /home/user/test;./file.sh" 

combing multiple commands when using ssh and scpの回答を確認しました。これに基づいて、私はまだ3つのログインが必要です。最初のsshとmkdir、1つはscp、もう1つはsshとシェルスクリプトの実行です。

もっと良い解決策はありますか? GNU tarssh

+3

「ssh」のキーベースの認証方法を試したことがありますか?私は/test/の場所を迷っていませんか?そうでない場合は、 'ssh-keygen'を検索するか、' man ssh-keygen'を実行してみてください。 – iamauser

+1

'rsync'を使って複数のファイルをコピーすると、必要に応じて自動的にディレクトリが作成されます。これにより、最初の3つのコマンドを組み合わせることができます。 – Barmar

+1

'ControlMaster'はあなたの友人です。あなたは複数のコマンドに1つの接続を使用できます。 –

答えて

1

:より安全な方法については

tar -c file.sh test/somefile.txt | sshpass -p 'somepwd' ssh [email protected] -C "tar -C/--transform 's|test/||;s|^|/home/user/test/|' --show-transformed-names -xv; cd /home/user/test; ./file.sh" 

man sshpassを参照してください、sshpassとパスワードを渡します。

+1

'tar'をうまく使います!認証はどのように達成されますか? –

+0

@MikeSlinn:いいキャッチです。私は私の答えを更新しました。 – Cyrus

1
  1. Use public/private keysパスワード認証ではなく、これにより、sshの使用が簡素化されるばかりでなく、特にあなたが接続しているdisallow password authentication on the serverの後では、より安全です。パスワード認証を使用すると、がハッキングされるか、サーバーが既に侵害されていて、まだそのことを知らないことを意味します。この回答の残りの部分は、公開鍵/秘密鍵を設定したことを前提としています。

  2. /testにファイルがあります。作業ディレクトリをルートディレクトリに入れないでください。これはセキュリティ上の問題を招きます。代わりに、適切に権限を設定する経験がない限り、ホームディレクトリで作業してください。

  3. file.shは、現在のディレクトリにある(つまり、何でも)、あなたがrsyncを使用することはできません/test/からファイルをしたいので。すべてのファイルが同じディレクトリにある場合は、rsyncが適しています。

これは私たちが残したものです。

ssh [email protected] "mkdir -p /home/user/test" 
scp file.sh [email protected]:/home/user/test 
scp /test/somefile.txt [email protected]:/home/user/test 
ssh [email protected] -C "cd /home/user/test;./file.sh" 
関連する問題