私の環境は、ノードサーバー(Rundeckサーバー)とノードターゲット(リモートSolarisホスト)の間のユーザー「マスター」に対してSSHパスワードなしの認証で構成されています。
/app/acme/stopApp.sh
Targetで、ユーザーと一緒にスクリプトを実行したいと思いますappmanager
。
通常、スクリプトを手動で実行する必要がある場合は、次を使用します。
ssh master@server sudo su - appmanager
または単に:
ssh -t master@server 'sudo su - appmanager'
これはパスワードなしで機能し、最終的に(appmanagerとして)実行されます:
/app/acme/stopApp.sh
しかし、Net::SSHを使用してこれらの手順を再現する方法を理解することはできません。実行sudo su - appmanager
してから/app/acme/stopApp.sh
、サブシェルで実行していますよね?
require 'rubygems'
require 'net/ssh'
require 'net/scp'
require 'crypt/blowfish'
require 'yaml'
#
# ...
#
Net::SSH.start( host, user, :password => password ) do |session|
# It's possible to proceed in this way?
cmd = 'sudo su - appmanager;/app/acme/stopApp.sh'
ses = session.exec!( cmd )
end
ターゲットサーバー上にいるようなものを実行しようとすると、次のことに気付きました。
sudo su -c /app/acme/stopApp.sh appmanager
以下のメッセージが表示されます。
We trust you have received the usual lecture from the local System Administrator.
It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility. Password:
Password: