SSHでサーバーにログインする人が実行するスクリプトがあります。
ユーザーが接続している IP アドレスを自動的に調べる方法はありますか?
もちろん、ユーザーに聞くこともできますが(プログラマー向けのツールなので問題ありません)、すぐにわかった方がいいでしょう。
SSHでサーバーにログインする人が実行するスクリプトがあります。
ユーザーが接続している IP アドレスを自動的に調べる方法はありますか?
もちろん、ユーザーに聞くこともできますが(プログラマー向けのツールなので問題ありません)、すぐにわかった方がいいでしょう。
次のような環境変数があるかどうかを確認します。
$SSH_CLIENT
また
$SSH_CONNECTION
(またはその他の環境変数)ユーザーがログインしたときに設定されます。次に、ユーザーログインスクリプトを使用して処理します。
IPを抽出します。
$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
次のコマンドを使用できます。
server:~# pinky
それはあなたに次のようなものを与えるでしょう:
Login Name TTY Idle When Where
root root pts/0 2009-06-15 13:41 192.168.1.133
IPアドレスだけを取得するには、次のことを試してください。
who am i|awk '{ print $5}'
Linux マシンで次のコマンドを入力するだけです。
who
以前の回答を改善します。ホスト名の代わりに IP アドレスを指定します。--ips は OS X では使用できません。
who am i --ips|awk '{print $5}' #ubuntu 14
より普遍的に、OS X 10.11 の $5 を $6 に変更:
WORKSTATION=`who -m|awk '{print $5}'|sed 's/[()]//g'`
WORKSTATION_IP=`dig +short $WORKSTATION`
if [[ -z "$WORKSTATION_IP" ]]; then WORKSTATION_IP="$WORKSTATION"; fi
echo $WORKSTATION_IP
netstat -tapen | grep ssh | awk '{ print $4}'
SSH ライブラリ ( https://code.google.com/p/sshxcute )を介してプログラムで取得できます。
public static String getIpAddress() throws TaskExecFailException{
ConnBean cb = new ConnBean(host, username, password);
SSHExec ssh = SSHExec.getInstance(cb);
ssh.connect();
CustomTask sampleTask = new ExecCommand("echo \"${SSH_CLIENT%% *}\"");
String Result = ssh.exec(sampleTask).sysout;
ssh.disconnect();
return Result;
}
マシンに最近ログインしたユーザーのリストを取得する簡単なコマンドは、last
. これは最新のものから順に並べられるためlast | head -n 1
、最後のログインが表示されます。ただし、これは現在ログインしているユーザーではない場合があります。
出力例:
root pts/0 192.168.243.99 Mon Jun 7 15:07 still logged in
admin pts/0 192.168.243.17 Mon Jun 7 15:06 - 15:07 (00:00)
root pts/0 192.168.243.99 Mon Jun 7 15:02 - 15:06 (00:03)
root pts/0 192.168.243.99 Mon Jun 7 15:01 - 15:02 (00:00)
root pts/0 192.168.243.99 Mon Jun 7 13:45 - 14:12 (00:27)
root pts/0 192.168.243.99 Mon May 31 11:20 - 12:35 (01:15)
...
netstat -tapen | grep ssh | awk '{ print $10}'
出力:
私の実験では2つの#
netstat -tapen | grep ssh | awk '{ print $4}'
IPアドレスを与えます。
出力:
127.0.0.1:22 # in my experiment
しかし、結果は他のユーザーやものと混ざり合っています。もっと作業が必要です。
彼が対話型セッションを開き(つまり、疑似端末を割り当て)、stdinにアクセスできると仮定すると、そのデバイスでioctlを呼び出して、デバイス番号(/ dev / pts / 4711)を取得し、/ var / run / utmp(接続元のユーザー名とIPアドレスもあります)。
通常、/var/log/messages (または OS によっては同様のもの) にログ エントリがあり、ユーザー名で grep できます。
netstat は機能します (上部にこのようなものがあります) tcp 0 0 10.x.xx.xx:ssh someipaddress.or.domainame:9379 ESTABLISHED
Linux: 私は誰ですか | awk '{print $5}' | sed 's/[()]//g'
AIX: 私は誰ですか | awk '{print $6}' | sed 's/[()]//g'
@Nikhil Katreの答えに賛成です:
マシンにログインした最後の 10 人のユーザーを取得する最も簡単なコマンドは、
last|head
.すべてのユーザーを取得するには、
last
コマンドを使用するだけです
基本的に何を使っているwho
か、何をしたか。pinky
しかししかししかし、彼らは過去のセッション情報を提供しません。
このチェックを開始したときに、ログインしてログアウトしたばかりの人を知りたい場合にも、これは興味深いかもしれません。
マルチユーザーシステムの場合。探しているユーザー アカウントを追加することをお勧めします。
last | grep $USER | head
編集:
私の場合、 $SSH_CLIENT と $SSH_CONNECTION の両方が存在しません。