SSHログイン時にコマンドを自動的に実行する方法は?


18

Linuxサーバーにログインするたびに、いくつかのコマンドを自動的に実行したい(変数の設定、場所の変更など)

これは、システムの起動時ではなく、ユーザーログイン時に実行する必要があります。

これを行うにはどうすればよいですか?


bash(1)のINVOCATIONセクションを読む必要があります(man bash)。
Andrew Schulman

回答:


31

コマンドをに配置し~/.bashrcます。そこにあるものはすべて、ログインするたびに実行されます。

sshを介してログインするときにのみ実行するコマンドが必要な場合(物理的にログインするときは必要ない)、SSH_CONNECTION環境変数の存在をテストし、環境変数が存在する場合にのみ実行することができます。


私はrootとしてログインしていません。それはAWSサーバーなので、 "ec2-user"としてログインし、 "sudo su-"を使用してrootに変更する必要があります。コマンドを「/home/ec2-user/.bashrc」に配置する必要がありますか?

5
これは〜/ .bashrcが〜/ .bash_profileから提供されていることを前提としています。〜/ .bash_profileは、sshのようなログインシェルに対して呼び出されるスクリプトです。私はあなたがGnomeのターミナルを開く場合は、〜/ .bashrcには、例えば、すでにログインした後、呼び出されます信じています。
dgrant

あなたは私を混乱させました、もっと説明させてください:これは仮想サーバーであるAmazon Web Servicesインスタンスなので、物理的にログインする人は誰もいません(物理的に1つのマシンとして存在するかどうかさえわかりません)。ユーザー名ec2-userでPUTTYを使用してログインします。これにより、/ home / ec2-userディレクトリに移動します。次に、「sudo su-」と入力してrootユーザーに変更し、「/ root」にドロップします。次に、「/ home / ec2-user」に戻すなどの一連のコマンドを入力し、いくつかを設定する必要があります。変数、エイリアスなど。だから...どうすればこれを行うことができますか?

また、ユーザーを変更しているので、ec2-user bashプロファイルに「sudo su-」のみを配置し、残りのコマンドをルートbashファイルに配置する必要があると思いますか?

注:実際には、存在する場合に呼び出されるのは.profileです。.bash_profileが存在しない場合は、代わりに呼び出されます。
dgrant

14

これをすべてのユーザーに適用したい場合は、これを〜/ .bashrcまたは/etc/bash.bashrcに入れてください。

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi

実行を閉じた後、セッションを失うにはどうすればよいですか?
e-info128 2014年

1
@WHKセッションを失うとはどういう意味ですか?
Llamageddon 2014年

@Llamageddon:彼は私と同じことを考えていると思います。SSHセッション全体をに入れたい場合は、エコーの代わりにscreenあなたの答えを使用してscreenそこに置くことができます。これに関する問題は、screenセッションを終了すると、ログアウトする代わりにSSHプロンプトに戻ることです。ただし、このコメントを書き出すだけで答えが得られました。logoutコマンドの後にscreenコマンドを追加します。
zondo 2017年

ただし、これはbashを使用しないsshセッションでは機能しません。たとえば、sftpセッションを開いたときなどです。
Fabio

@zondo @ e-info128 exec commandは、現在のシェルを実行したものに置き換えます。
ラマゲドン2017年

6

または、次の呼び出し中に実行するコマンドを指定できますssh

$ ssh -t server 'cmd; exec bash -l'

リストの最後のコマンドは、優先シェルでインタラクティブセッションを開始する必要があります。実行するコマンドが多い場合は、SSHサーバーにスクリプトファイルを作成することを検討してください。


1
これは非常に便利です。それが質問者が尋ねた答えと完全に一致するかどうかはわかりませんが、明白でない可能性があるため、人々はそれについて知っておく必要があります。たとえば、 "ssh user @ host" export x = 5; bash "その後、エコーをポップアップするターミナルで$ xは5を表示します
clearlight

3

実際に~/.ssh/rcしたときに実行するコマンドを追加するための適切な場所であるあなたは、むしろシステムの任意のユーザよりも、ログインします。

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in,
         just before the user's shell (or command) is started.  See the
         sshd(8) manual page for more information.

必ずしも。それはコマンドを置くことができる場所。
Daniel B


彼らが何をしているのかを知らなければ、本当に困ることになるでしょう。それは、コーナーケースにおける潜在的に有用なのですが、それは可能性が本当に彼らは忘れてしまった場合は台無しに誰かが、彼らはそこにコマンドを入れたり、名前と、そのファイルのパス。一般に、ここで他の回答が示唆しているように、スタートアップログインコマンドを予想される場所、.bashrcをリモート側に置き、$ SSH_CONNECTIONをテストすることを強くお勧めします。
クリアライト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.