読者です 読者をやめる 読者になる 読者になる

ssh の接続先の Emacs で接続元の OS を確認したい

サーバの Emacs で、 Linux から接続したのか Mac から接続したのかを確認したいが、これはけっこう難しい。結局できなかったのだが、試したやり方をいくつか上げておく。

ssh 接続時の環境変数で判定する

ssh は接続後のサーバに環境変数を設定することができるので、それを利用する。
http://d.hatena.ne.jp/taiyo/20080613/p1
クライアントの ~/.ssh/environment か ~/.ssh/rc に

CONNECTED_FROM=$OSTYPE

だとかを書いておき、サーバの .emacs

(defun connected-from-linux-gnu ()
  ;; processing here if connected from Linux
)

(setq ssh-connected-from (getenv "CONNECTED_FROM"))
(if ssh-connected-from
    (if (equal ssh-connected-from "linux-gnu") 
        (connected-from-linux-gnu)
      ))

この方法ができるなら問題は解決だが、これは /etc/ssh/sshd_config で

PermitUserEnvironment yes

となっていないといけない。(デフォルトはno)
サーバの root 権がない自分の環境では /etc/ssh/sshd_config の編集ができず、これは諦めた。

IP で判定する

他には IP から判定する方法も試した。これは接続先の .emacs

(defun connection-from-desktop ()
  ;; processing here if connected from Desktop PC
)

(setq ssh-connection-ip (getenv "SSH_CLIENT"))
(if ssh-connection-ip
  (progn
    (string-match "[^ ]+" ssh-connection-ip)
    (if (equal (match-string 0 ssh-connection-ip) "000.000.00.000")     
        (connection-from-desktop)
      )))

とするだけでできる。しかしこの場合、固定 IP でないといけないうえ、違う PC だろうと同じ LAN から接続した場合は意味がない。ノート PC とデスクトップ PC が判別できれば満足だったが、やはりノート PC を家からつなぐことも多いので諦めた。
結局できなかったわけだが、いい方法があれば教えてほしい。