web-dev-qa-db-ja.com

SSH経由でリモートサーバーでコマンドを実行-終了せずに

学校のLinux Labに頻繁に接続して、プログラミングの課題をリモートで処理します。時々、サーバーにログインしている他の学生がたくさんいると、接続が遅くなり、接続タイムアウト中に作業が失われます。ラボには複数のサーバーがありますが、接続が確立されるとすぐにwhoを自動的に実行できるようにしたいので、サーバーがどれほど混雑しているかを確認できます。いっぱい。現時点では、.bash_aliasesファイルの関数を使用して、接続とパスワードの入力を合理化します。

ファイル~/.bash_aliases内:

#!/bin/bash

# ssh to the Linux lab. Takes hostnames defined in ~/.ssh/config as 
# parameters
function sshll()
{
    if [ "$@" ]
      echo "Connecting to hostname $@";
      sshpass -f <password_file> ssh $@;
    else
      echo "Connecting to default Host";
      sshpass -f <password_file> ssh <user@ipaddress>;
    fi
}

これは機能するため、whoコマンドの最後にsshを追加しました。

ファイル~/.bash_aliases内:

#!/bin/bash

# ssh to the linux lab. Takes hostnames defined in ~/.ssh/config as 
# parameters
function sshll()
{
    if [ "$@" ]
      echo "Connecting to hostname $@";
      sshpass -f <password_file> ssh $@ 'who';
    else
      echo "Connecting to default Host";
      sshpass -f <password_file> ssh <user@ipaddress> 'who';
    fi
}

これは接続し、パスワードを自動的に入力し、whoを実行しますが、接続を閉じます。 後で接続を閉じずに、whoを自動的に実行する方法はありますか?

5

bashを実行するだけで十分です。

 sshpass -f <password_file> ssh <user@ipaddress> 'who; bash';
5
int_ua

これはan answerですが、間違いなくthe answerではありません。

sshd(リモートホスト上のsshサービスのデーモン)は、接続時に〜/ .ssh/rcでコマンドを実行することを発見しました。このファイルを作成し、そこにwhoを追加したところ、リモート接続を行うたびにユーザーのリストが表示されるようになりましたが、それでもログインシェルが表示されます。

リモートホスト上:

File ~/.ssh/rc:

#!/bin/bash

# This file is executed by sshd when a remote connection is started over ssh
who

クライアント上:

In file ~/.bash_aliases:

#!/bin/bash

# ssh to the linux lab. Takes hostnames defined in ~/.ssh/config as 
# parameters
function sshll()
{
    if [ "$@" ]
      echo "Connecting to hostname $@";
      sshpass -f <password_file> ssh $@;
    else
      echo "Connecting to default Host";
      sshpass -f <password_file> ssh <user@ipaddress>;
    fi
}

ただし、権限がないために〜/ .ssh/rcを使用できない、またはその他の理由で同様の問題を抱えている他のユーザーについては、クライアント側からこれを行う方法を知りたいと思っています。

3

int_uaの答え は私が使用するものです。完全を期すために、リモートサーバー上で独自の.profileまたは.bashrcを編集できる場合は、次のいずれかに追加できます。

if [[ -n $SSH_TTY ]]
then
    who
fi

SSHはさまざまな変数を設定します。そのうちの1つはSSH_TTYです-これらの変数をテストして、SSH経由で接続しているかどうかを判断できます。 ~/.ssh/rcの制限により、これを使用できなくなることはありません。


これを使用してプロンプトを設定します(ローカルシェルのホスト名をスキップする方法に注意してください)。

if [[ -n $SSH_TTY ]]
then
    PS1="\u@\h:\w \$ "
else
    PS1="\u:\w \$ "
fi
3
muru