遙かなるマチョジニア

マッチョXエンジニアを目指すブログ

【書評】OpenSSH[実践]入門:テレワーク時の仕事ハックのために

スポンサードリンク

勤めている会社ネット環境がクソすぎてテレワークが許可されても全然仕事ができない状態だった。 sshのポートを許可してくれと懇願してそれだけはOKをもらった。 (それにしても、あれだけ敏感になっておいて22番ポートを開けるリテラシーのなさよ。)

んでsshが使える環境になったので、その範疇でやれることをやりたいと思って購入したのがsshの本である。

OpenSSH[実践]入門 (Software Design plus)

OpenSSH[実践]入門 (Software Design plus)

  • 作者:川本 安武
  • 発売日: 2014/11/01
  • メディア: 単行本(ソフトカバー)

sshだけでこの分厚さは想像以上ではあったものの、sshに関する本はあまり出版されていなかったので選択肢はほぼなかった。 この本は評価もそこそこ高いし、「実践」「入門」というワードに釣られてしまった。

ネットである程度調べて実践していたが、それでも知らない点がたくさんあった。 そもそも、なんのために使うんだ?というような章もある。これは、結構な人数を管理するための機能なんだろうけど、自分の場合は数人レベルなので、今は関係ないとおもって斜め読みした。 単純に、sshでリモートログインして開発してますよ、という人は一度読んでおいて欲しい。 まじか、こういう使い方があるのか、など新たな発見は間違いなくある。 個人的にはGoogle Authenticatorをサポートしていることにびっくりした。

個人的付箋

ポートフォワードの追加と削除

エスケープキャラクタ(デフォルトはチルダ~)のあとにCを入力するとコマンドラインが開き、プロンプトがsshに変わる。 例えば、ヘルプを表示する。

$ ~C ←実際には~Cは表示されない
ssh> help
Commands:
    -L[bind_address:]port:host:hostport request local forward
    -R ・・・
 ・・・

インターネットに接続できない環境のホストをアップデートする

ポートフォワードとtsockを組合せえれば、ネットワークから切り離されたOSをアップデートさせる経路を作れる。まず、リモートポートフォワードを有効にして接続し、隔離されたホストがクライアントのsshdに接続できるようにする。 10022はクライアントのsshdに繋がるポート。

[client]$ ssh -R 10022:localshot:22 remotehost

つぎにダイナミックポートフォワードを有効にし、クライアントをSOCKSのプロキシにする。

[remotehost]$ ssh -D 1080 -p 10022 localhost

tsocksはプロキシエンドで名前解決ができる。remotehostはクライアントをプロキシにしてインターネットを接続することが可能になる。

[remotehost]$ tsocks yum update

Match(条件分岐)

OpenSSH-6.5から、SSHクライアントのコンフィグファイル内でキーワードによる条件分岐ができるようになった。

Matchで使用できるキーワード

execで展開されるトーク

  • %L
    • ローカルマシンのホスト名の最初のドットまで
  • %l
    • ローカルマシンのホスト名
  • %h
    • 接続するリモートマシンのホスト名
  • %n
  • %p
  • %r
  • %u
    • ローカルマシンでsshを実行したユーザ名

設定例

Host web01
  HostName 192.168.100.11

Host proxy-server
  ProxyCommand none

Match exec "nmcli connection status id <ap-name> 2> /dev/null"
  proxyCommand ssh -W %h:%p proxy-server

%hを使用した設定例

Host web01 web02 mail01 mail02 db01 db02
  HostName %h.localhost.localdmain

ローカルポートフォワードを複数設定する

複数行で記述可能

LocalForward localhost:8080 192.198.100.100:80
LocalForward localhost:9090 192.198.100.200:80

ProxyCommand

リモートホストへ接続するために使用するコマンドを指定する。 ProxyCommandで使えるトークンは下記。

  • %h
    • 接続するホスト名
  • %p
    • 接続するポート番号 *%r
    • リモートのユーザ名

暗号方式による転送速度とCPU負荷の違い

書籍の一部を掲載。 f:id:shuheilocale:20200529082756p:plain