学校の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
を自動的に実行する方法はありますか?
bash
を実行するだけで十分です。
sshpass -f <password_file> ssh <user@ipaddress> 'who; bash';
これは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を使用できない、またはその他の理由で同様の問題を抱えている他のユーザーについては、クライアント側からこれを行う方法を知りたいと思っています。
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