2016-07-30 15 views
0

リモートサーバーへのSSHのスクリプトをプログラミングし、次の「nvidia-smi」を実行してGPUサーバーのステータスを取得しました。スクリプトの説明と目的だけでしたが、質問は実行しますこれは "root"として別のサーバーにパスワードを設定することはできませんが、ユーザーはできません。どうすればスクリプトを実行してステータスを取得できるようにスクリプトをプログラムできますか?リモートサーバーにパスワードを入力しなくても、どんな認証でも使用できますか?ここでSSHからリモートサーバーへのバッシュプログラミング

はスクリプトです:

#!/bin/bash 

HOSTS="gpuserver01\ngpuserver02" 
SCRIPTS="nvidia-smi" 

echo -e "which GPU server do you want to check?\n$HOSTS\n"-----------------"" 
echo "Please Enter Numebr of GPU Server" 

read ans 

#for HOSTNAME in $ans ; do 

if [ $ans = '1' ]; then 
HOSTNAME="gpuserver01" 
ssh ${HOSTNAME} "${SCRIPTS}" 
else 

HOSTNAME="gpuserver02" 
ssh ${HOSTNAME} "${SCRIPTS}" 
fi 

#done 

ありがとうございました。

+0

注言う:等価演算子は、 '='つだけです。 bashは残念ながら '=='を受け入れますが、それは他のシェルで壊れます。 '=='準拠していないスクリプト病を広げないでください。ありがとう。 – Jens

+0

ありがとうございました。 – Ajko

答えて

0
  1. 通常のユーザーをリモートホストに追加します(例:gpuuser01)。
  2. そのユーザーのSSHキーを作成します。 [1]次に、パスワードなしでgpuuser01にログインすることができます。
  3. setuidフラグ[2]を使用してリモートホスト(例:gpuserver01)に新しいスクリプトを作成し、nvidia-smiを実行します。
  4. これで、リモートホストに接続し、root以外のパスワードでスクリプトを実行することができます。
  5. スクリプト(問題のスクリプト)を書き直してください。

[1] https://kb.iu.edu/d/aews

[2] http://www.cyberciti.biz/faq/unix-bsd-linux-setuid-file/

+0

ありがとうございました。ここでは、ユーザーがログインノードにログインし、GPUサーバのステータスを見るためにスクリプトを実行して、サーバにSSHせずに、スクリプトを実行して、ちょっとしたものをリモートサーバに送信して、ステータスアップ。 – Ajko

+0

スクリプトをログインシェルとして設定できます。だから、彼らはbashシェルを見ることはできませんが、アカウントにログインするときにあなたのアプリが出力されます。 – Adam

1

他のユーザーがroot権限で実行するようにするためにあなたのスクリプトへのアクセス権を与えることができます。

run visudo

Cmnd_Alias  CUSTOM_CMD=/path/to/script/myscript.sh 
myUser1   ALL = (root) NOPASSWD:CUSTOM_CMD 

他のユーザーが同じgroup.Letを持っている場合は、otherUsers

Cmnd_Alias  CUSTOM_CMD=/path/to/script/myscript.sh 
%otherUsers   ALL = (root) NOPASSWD:CUSTOM_CMD 
+0

私はいくつかのフォローアップの質問があります。スクリプトの内容を隠す方法はありますか?そのスクリプトを実行する人はcatできません(chmod 711)?とにかく、スクリプトのユーザーがこれを使用してコンソールアクセスを得るためにリモートサーバーにsshできるのですか? OPは、ユーザーが別の答えに対するコメントに従ってsshを得ることを望んでいません。 (rootとしてのsshは恐らく壊滅的です)。 –

+0

はい、chmod 711が動作します。スクリプトに脆弱性が含まれていない場合、ユーザーはアクセス権を取得できません。 – sozkul

関連する問題