2017-04-24 5 views
0

2週間ごとに私たちのオフィスのリモートUbuntu CLI専用サーバで行うべきいくつかのタスクがあります。私は通常、コマンドを1つずつ入力しますが、私はそれらの最初のステップを繰り返すのに費やす時間を短縮する方法を見つけようとしています(スクリプトを書くかもしれません)。ここでディレクトリにcdして、スクリプト内のリモートサーバの特定のユーザにsu

私は何をすべきかです:

ssh [email protected]_local_server 
# asks for my_username password 
cd /path/to/particular/folder 
su particular_user_on_local_server 
# asks for particular_user_on_local_server password 

そして、私は自分の仕事を行うことができます(など、サービスを再起動し、ファイルを削除/、RailsアプリケーションにコピーをいくつかのRubyスクリプトを実行します)

私はワンステップのスクリプト/コマンドでこれを行うための方法を見つけようとしています:

sshそして、その後cdディレクトリへの接続

ssh [email protected] 'cd /some/path/to/folder ; su other_user' 
# => does not keep my connection open to the server, just execute my `cd` 
# and then tells me `su: must be run from terminal` 
ssh [email protected] 'cd /some/path/to/folder ; bash ; su other_user' 
# => keeps my connection open to the server but doesn't switch to user 
# and I don't see the usual `username:~/current/folder` prefix in the CLI 

sshを経由してリモートサーバー上(接続を維持)、端末を開く方法と、特定のディレクトリ変更+スイッチがあります:

このユーザー」に私は以下を使用してみました自動化された方法で?

+0

理由は、その必要があるでしょう 'cdがあります'あなたが' su'の前に? 'su'オプションを付けないと、現在のディレクトリが変更される可能性があるため、代替手段が簡単になります。 – Aaron

+0

それは非常に良い点です@アーロン、それを指摘してくれてありがとう。 – MrYoshiji

答えて

2

あなたは、-tで目的のディレクトリに変更を疑似端末の割り当てを強制して、あなたが希望するユーザーあるものとシェルを置き換えることができます。

ssh -t [email protected] 'cd /some/path/to/folder && exec bash -c "su other_user"' 
+0

この回答をありがとうございました。私はスクリプトを改善しようとしています。ターゲットディレクトリのプロンプトを表示しています( 'cd'が存在する場合は、パスを使用した後に追加します)。しかし、この場所に存在しないディレクトリに入ると、接続全体が停止します。 「そのようなファイルやディレクトリがありません」というエラーが発生したため、 'cd'が失敗した後に接続を維持する方法はありますか? – MrYoshiji

+0

それは '&&'のためです。 'cd'コマンドの終了ステータスを無視したい場合、' && 'を ';'で置き換えることができます。存在しないディレクトリについてのエラーメッセージが表示されますが、 'bash -c'は実行されます。 –

0

sudo -Hを(物事を難しくするために、私はYakuakeを使用しています)あなたができるので、現在の作業ディレクトリを保持します:ssh

ssh -t [email protected] 'cd /path/to/dir/; sudo -H -u other_user bash' 

-tパラメータがそうでない場合に必要とされる二sudoはできませんあなたのパスワードを尋ねることができます。

関連する問題