私のスクリプトがコード化された方法では、ルートを介してサーバーに直接接続することはできません。このコードは、デフォルトでサーバーからマイコンピュータにファイルをコピーして機能しますが、ルートのみアクセスできるため、多くのファイルにアクセスできません。ユーザーとしてサーバーに接続し、ルートに切り替えてファイルをコピーするにはどうすればよいですか。
変更したいコード:
sshpass -p "password" scp -q -r [email protected]:some_directory copy_it/here/
つまり、リモートサーバーからrootとしてのみアクセスできるファイルをリモートにコピーしたいのですが、rootとしてssh / scpを介して直接リモートサーバーにアクセスできるようにしたくはありません。
sshだけが可能で、sshpassは不可能ですか?
答え1
使えばいいと思います。鍵(パスワードではありません)自動リモートログイン。
rootアクセス権を取得するには、パスワードのない「su」が必要な場合、またはrootユーザーを使用してコマンドを実行できるように「sudo」を設定することをお勧めします。
その後、「ssh」(scpではない)を使用してリモートサーバーにログインし、コマンドを実行できます。その後、tar/lszrz/whatever を使用してファイルを転送できます。
このように:
ssh remote.server.com sudo tar fc - /path/on/the/remote/server | tar fx -
これにより、/path/on/the/remote/server が現在のディレクトリにコピーされます。
編集する:ユーザーがこれを行うことを許可するのは安全ではないことに注意してくださいsudo tar
。
答え2
したがって、アプローチはリモートでコマンドを実行し、sudoを介してリモートシステムの/ tmpにファイルをコピーし、所有者をリンクされたユーザーに変更し、/ tmpからリモートにコピーすることです。
ssh [email protected] "sudo cp -R some_directory /tmp"
ssh [email protected] "sudo chown -R username:username /tmp/some_directory"
scp -q -r [email protected]:/tmp/some_directory copy_it/here/
ssh [email protected] "rm -r /tmp/some_directory"