3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ローカルネットワーク内マシンのMACアドレスからSSHログイン

Last updated at Posted at 2017-07-08

投稿直後に致命的なミスを見つけたので再投稿です

目的

RaspberryPiのような頻繁に持ち運んだりOS吹っ飛ばしたりするようなマシンのIPアドレスを固定するのも面倒なので、MACアドレスから動的に割り振られたipアドレスを参照してsshログインします。

やること

  • arpでログインしたいマシンのipアドレスを調べる。
  • gawkでarpの標準出力からipアドレス部分を切り出す。ユーザ名を指定する場合ここで指定する
  • 切り出したipアドレスにsshでログインする。
    ~~これをone-linerでやっていきます。
arp |grep "mac_address"|gawk 'gensub(/(\s*?)(\S+)/,"\2","") {print "user@" $1}'|xargs ssh -t -t
```~~
 
長いのでaliasに登録するとすっきりします。結局面倒なので本末転倒感が
クォーテーションのエスケープ(特にgawk)を忘れずに。
### 追記
上の書き方だとログインまではできますがリモートホストでのコマンド実行ができません。
BSD版```xargs```であれば```-o```オプションを付加するだけで対応できますが、GNU版の場合は以下のようになります。

arp|grep "mac_address"|gawk 'gensub(/(\s*?)(\S+)/,"\2","") {print "user@" $1}'|xargs sh -c 'ssh "$@" </dev/tty' ssh



## Bash on Windows環境の場合(Creators Updateでは要検証)
linuxの```arp```コマンドが使えないためWindowsの```arp```を使用します。
[cbwin](https://github.com/xilun/cbwin)([wsl-terminal](https://github.com/goreliu/wsl-terminal)に同梱)を使用すれば```wcmd COMMAND```でWindowsのコマンドをbashのterminal上から使えます。
今回の場合、先頭の```arp```を```wcmd|arp -a```に書き換えればokです
```bash
wcmd arp -a|grep "mac_address"|gawk 'gensub(/(\s*?)(\S+)/,"\2","") {print "user@" $1}'|xargs sh -c 'ssh "$@" </dev/tty' ssh

注意点

~~xargssshに引数を渡して実行する際に-tオプションが2つ必要になります。
スクリプト内でsshを実行しているため、-tオプションが付いていない場合

Pseudo-terminal will not be allocated because stdin is not a terminal.  

とwarningが出てリモートホストのシェルには入れません。
-tオプションが2つ必要になる理由はわからなかったです。~~
追記を参照してください。

参考文献

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?