201

SSHでサーバーにログインする人が実行するスクリプトがあります。

ユーザーが接続している IP アドレスを自動的に調べる方法はありますか?

もちろん、ユーザーに聞くこともできますが(プログラマー向けのツールなので問題ありません)、すぐにわかった方がいいでしょう。

4

19 に答える 19

314

次のような環境変数があるかどうかを確認します。

$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
于 2009-06-15T14:01:47.590 に答える
118

次のコマンドを使用できます。

server:~# pinky

それはあなたに次のようなものを与えるでしょう:

Login      Name                 TTY    Idle   When                 Where 

root       root                 pts/0         2009-06-15 13:41     192.168.1.133
于 2009-06-15T16:38:11.687 に答える
37

IPアドレスだけを取得するには、次のことを試してください。

who am i|awk '{ print $5}'
于 2011-12-19T22:21:07.250 に答える
22

Linux マシンで次のコマンドを入力するだけです。

who
于 2014-09-30T09:40:41.627 に答える
5

以前の回答を改善します。ホスト名の代わりに 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
于 2015-10-24T18:09:00.517 に答える
4
netstat -tapen | grep ssh | awk '{ print $4}'
于 2013-09-03T07:19:04.050 に答える
2

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;
}
于 2014-06-28T05:27:36.423 に答える
2

マシンに最近ログインしたユーザーのリストを取得する簡単なコマンドは、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)    
...
于 2017-10-05T07:23:35.477 に答える
1
netstat -tapen | grep ssh | awk '{ print $10}'

出力:

私の実験では2つの#

netstat -tapen | grep ssh | awk '{ print $4}' 

IPアドレスを与えます。

出力:

127.0.0.1:22 # in my experiment

しかし、結果は他のユーザーやものと混ざり合っています。もっと作業が必要です。

于 2013-11-04T16:15:12.187 に答える
0

彼が対話型セッションを開き(つまり、疑似端末を割り当て)、stdinにアクセスできると仮定すると、そのデバイスでioctlを呼び出して、デバイス番号(/ dev / pts / 4711)を取得し、/ var / run / utmp(接続元のユーザー名とIPアドレスもあります)。

于 2009-06-15T14:02:55.513 に答える
-1

通常、/var/log/messages (または OS によっては同様のもの) にログ エントリがあり、ユーザー名で grep できます。

于 2009-06-15T13:56:47.133 に答える
-1

netstat は機能します (上部にこのようなものがあります) tcp 0 0 10.x.xx.xx:ssh someipaddress.or.domainame:9379 ESTABLISHED

于 2011-12-12T20:00:24.223 に答える
-1

Linux: 私は誰ですか | awk '{print $5}' | sed 's/[()]//g'

AIX: 私は誰ですか | awk '{print $6}' | sed 's/[()]//g'

于 2013-05-31T10:55:31.450 に答える
-1

@Nikhil Katreの答えに賛成です:

マシンにログインした最後の 10 人のユーザーを取得する最も簡単なコマンドは、 last|head.

すべてのユーザーを取得するには、lastコマンドを使用するだけです

基本的に何を使っているwhoか、何をしたか。pinkyしかししかししかし、彼らは過去のセッション情報を提供しません。

このチェックを開始したときに、ログインしてログアウトしたばかりの人を知りたい場合にも、これは興味深いかもしれません。

マルチユーザーシステムの場合。探しているユーザー アカウントを追加することをお勧めします。

last | grep $USER | head

編集:

私の場合、 $SSH_CLIENT と $SSH_CONNECTION の両方が存在しません。

于 2018-08-28T21:19:12.653 に答える