セキュリティ上の理由から、クラウドノード(sshを介してのみアクセス可能、廃止されたGUI、Debian 7を実行)を設定し、「PermitRootLogin no」を使用しています。一部のアプリケーションでは、一部のルート所有設定ファイルをリモートからローカルにコピーしたい(たとえば、ローカルクライアント設定)。そして再現性のために、私はこのスクリプトを書いたかったのです(間違ったコマンドラインで数回フラッシュした後)。リモートアクティベーションのベストプラクティスは何ですか?sudo
スクリプトから(はい、パスワードを入力する必要があることを知っています。 -十分非対話型であればいいが必須ではない。 「PermitRootLogin no」が与えられると(物理アクセスがない場合)どうなりますか?私が試したいくつか:
(1):リモートで欲しいものがわからscp
ないので失敗します。 (AFAICS - 何か逃した?)scp
sudo
(2)ヌードrsync-path
:試してみました。
me@local ~ $ rsync --rsync-path='sudo rsync' remote:/path/to/file ${HOME}/backups/cloud_9/path/to/file
X11 forwarding request failed on channel 0
sudo: no tty present and no askpass program specified
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
...
グラフィックではなくAskpassを有効にできますか?普段着ダック- 見つかりません。ノートrsync-path
〜する(IIRC)「visiblepw」で動作しますが、裸で/なしでは動作しません。
(3) sudoers.d/visiblepw
: DDGを発見
http://www.sudo.ws/pipermail/sudo-users/2009-August/004142.html
> [sudo-users] Error: sudo: no tty present and no askpass program specified
> Todd C. Miller Todd.Miller at courtesan.com
> Mon Aug 3 10:43:04 EDT 2009
> Recent versions of sudo will refuse to prompt for a password if no tty is present,
> since it is not possible to turn off echo in this case. You can [enable this]
> with a line like:
> Defaults visiblepw
だから私は作りました。
me@remote:~$ sudo cat /etc/sudoers.d/visiblepw
> Defaults visiblepw
これはうまくいきますが、上記のようにリモートecho
でs pwを実行するとsudo
...しかし、今は例えばssh remote 'sudo whatever'
...誰も私のシェルを見ることができない限り可能です:-)
もっと良い方法があるのだろうか。私は何を逃したことがありませんか?もう一度申し上げますが、私はこれをスクリプトを通して実行したいと思います。
執筆中に発見したが見苦しく見せようとしなかったもう1つの事実(作成中に述べた)は次のとおりです。
(4)mkfifo
バスケットボールでジャンプ:ビューにも苦手で、スクリプトの作成にも適していません。私は何を逃したことがありませんか?
ベストアンサー1
より良いアプローチは次のとおりです。アンシプール- SSHを介してリモートコントロールと対話する構成管理ツール。これにより、リモートSSH認証とsudoまたはsu操作が大幅に簡素化されます。
Ansible をインストールしてホストインベントリを構成した後、これを実行するコマンドは次のとおりです。
ansible remotehost -m fetch -a "src=/etc/sudoers dest=remote-soduers" -u root --sudo --ask-sudo-pass
単純なマニフェストを設定する必要がある場合:
cat > hosts <<EOF
[remotes]
remotehosts
EOF
ansible -i hosts remotehost -m fetch -a "src=/etc/sudoers dest=remote-soduers" -u root --sudo --ask-sudo-pass
あるいは、SSHで「-t」オプションを使用して疑似端末割り当てを強制することで、クイックワンタイムコマンドを実行できます。
ssh -t remotehost "sudo rsync -av /path/on/remote localuser@localhost:/path/on/local"
これにより、2つのパスワードプロンプトが表示される可能性が高くなります。 1 つは sudo 用で、もう 1 つは root@remote からローカルに再接続するためのものです。