Bashスクリプトからリモートホスト名を取得する

Bashスクリプトからリモートホスト名を取得する

申し訳ありません。 Linux bashコマンドに関する私の知識は非常に基本的で、長い間検索してきましたが、何を検索するのか100%確信できません。

Linux bashスクリプトで現在ログインしているユーザーのリモートホスト名を取得する方法があるかどうか疑問に思います。ユーザーが実行するたびにログインする必要があるスクリプトがあります。私は次の日付を取得します:

cdat=`/bin/date +%a' '%d' '%h' '%Y', '%H':'%M`;

これで、リモートホストにユーザーを追加する必要があります(ログインしたユーザー名の代わりに)。また、ここで正しい用語を使用していることを100%確信できません。 「リモートホスト名」とは、SSH を介してログインするほとんどのサーバーで画面に印刷されるのと同じ出力を意味します。

Last login: Mon Jul 22 16:35:09 2013 from win7-i7-stuart.my.domain.com

私はそれを探していますwin7-i7-stuart.my.domain.com

答え1

who
jmcnama    pts/4        Jul 18 13:30    (9010-b6m2cx1.nmgco.com)

出力が提供する最後のフィールドは次のとおりです。

username=jmcnama
remote=$(who | awk -v user=$username '$1 == user {print $(NF)}')

ユーザーが複数回ログインするなど、他の問題がある可能性があります。最後のコマンドも役立ちます。最後に問題があります。長いソースノード値が切り捨てられる可能性があります。

私が知る限り、ログインソースを示す/proc "ファイル"はありません。最後のデータは /var//log/wtmp (通常) に保存されます。したがって、これはこの情報について文書化された唯一のソースです。

答え2

重複した情報をwho am i取得せずにただ一般who

$ who am i
sam      pts/6        2013-07-22 13:21 (192.168.1.110)

ユーモラスには、次のものを使用することもできます。

$ who mom likes
sam      pts/6        2013-07-22 13:21 (192.168.1.110)

sed以下を使用して、接続されたホストになるように解析できます。

$ who am i | sed 's/.*(\(.*\))/\1/'
192.168.1.110

次のコマンドを使用して、ユーザーログインの完全な履歴を表示することもできますlast

$ last <username>

たとえば、

$ last sam | less
sam      pts/6        192.168.1.110    Mon Jul 22 13:21   still logged in   
sam      pts/6        192.168.1.110    Mon Jul 22 11:02 - 11:02  (00:00)    
sam      pts/5        192.168.1.110    Thu Jul 18 14:41 - 16:41  (01:59)    
sam      pts/5        192.168.1.110    Wed Jul 17 15:56 - 16:28  (00:31)    
sam      pts/5        192.168.1.110    Wed Jul 17 15:56 - 15:56  (00:00)    
sam      pts/4        192.168.1.110    Wed Jul 17 14:28 - 14:29  (00:00)    
sam      pts/7        192.168.1.110    Tue Jul 16 16:27 - 16:50  (00:23)

引用する

関連情報