私は、ウェブサイトをマシンにダウンロードしてすべてをセットアップする一連のコマンドを実行するスクリプトを作成しています。
そのため、ほとんどのコマンドにはルートアクセスが必要です。たとえば、/etc/Apache2/sites-available
にvhostを追加、有効化、Apacheを再起動など...
そのためには、Sudo
を指定してスクリプトを実行する必要があります。
Sudo ./install-website.sh
Webサイトは、パスワードなしのSSHアクセスでセットアップされたgitリポジトリを備えたサーバー上にあります。ただし、キーは私のホームフォルダーにあり、ルートのホームフォルダーにはないため、ユーザーdan
に対してのみ機能します。
したがって、この部分に到達すると:
git clone [email protected]:git-repo $PATH_TO_INSTALLATION
Sudo
でスクリプトを開始したため、gitコマンドを開始しようとしているユーザーはrootです。そのため、ホストはホストのユーザーのパスワードを要求し続けます。
私は次のコマンドを試しました:
Sudo -u $Sudo_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION
しかし、それでもホストのユーザーのパスワードを要求していました。
Sudo
に$Sudo_USER
のホームパスを使用するように指示することはできますか?
ほとんどのものは変数であり、複数のマシンでこれを実行するため、変数でなければなりません。
Sudoはsudoers
コマンドで設定する必要があるvisudo
ファイルで設定します。
この構成ファイルは、オプションenv_reset
を使用して特定の環境変数をオーバーライドできます。どうやって進める:
visudo
次に、次のような行を見つけます。
Defaults env_reset
その後に追加します(例:HOME環境の例):
Defaults env_keep = "HOME"
この例は、お持ちのすべてのSudo構成用です。ユーザー/グループごとに指定することもできます。 sudoersのマニュアルページ を参照してください。
SSHの構成ファイルを使用して、ユーザー、使用するキーなどを指定できます。 SuperUser で説明しました。
提案された解決策(ただし、欠落しているビットおよび想定ビットを修正する必要があります)、ファイル/root/.ssh/config
を編集し、その許可chmod 0600 /root/.ssh/config
を設定します。
Host host.com
User dan
IdentityFile /home/dan/.ssh/id_rsa
次に、rootとして次のコマンドを実行すると、適切なSSH IDが使用されます。
git clone Host.com:git-repo $PATH_TO_INSTALLATION
スクリプトはrootとして実行されているため、su
権限のないユーザーに直接アクセスできます。ルーツはSudo
である必要はありません、Sudo
はルーサー用です;-)。
非特権ユーザーがdan
であり、周囲のスクリプトで$ PATH_TO_INSTALLATIONが設定されていると仮定します。
su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" dan
$PATH_TO_INSTALLATION
はdan
によって書き込み可能でなければならないことに注意してください。
かなり前にssh-keygen
を使用してsshキーを生成したとき、デフォルトのパス~/.ssh/id_rsa
を選択しませんでした。 zwets ' comment のおかげで、それを思い出しました。キーを変更し、~/.ssh/id_rsa
に入れました。
これで、両方のコマンドが機能します。
Sudo
あり
Sudo -u $Sudo_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION
zwets 'answer で示唆されているように
su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" $Sudo_USER