いますぐ実践! Linuxシステム管理

  • ¥0

    無料

システム管理者で初心者の方を対象に、実際に試せるシステム管理のノウハウを、お知らせします。Vine,Fedora,Ubuntu,DebianなどLinuxの他に、OpenBSD,FreeBSDなども対象とします。バックナンバーは発行者サイトにて。

著者サイト
 

メールマガジンを登録(無料)

もしくは

※ 各サービスのリンクをクリックすると認証画面に移動します。
※ 各サービスで登録しているメールアドレス宛に届きます。

メールマガジンを解除

もしくは

※ 各サービスのリンクをクリックすると認証画面に移動します。

  • このエントリーをはてなブックマークに追加
 
 
 
メルマガ名
いますぐ実践! Linuxシステム管理
発行周期
月2回
最終発行日
2018年10月08日
 
発行部数
2,834部
メルマガID
0000149633
形式
PC・携帯向け/テキスト形式
カテゴリ
インターネット・パソコン > OS > UNIX系OS

まぐまぐ!メールマガジンの用語集です。
下記の用語以外の不明な点はこちらをご覧ください。

 
発行周期
週1回、月1回などの発行頻度です。
部数
メルマガの配信数を記しています。
カテゴリ
まぐまぐ!に登録されているカテゴリです。
形式
メルマガには以下の配信形式があります。下部「メルマガ形式」をご参照下さい。
 
最終発行日
最後にメルマガが配信された日付です。
メルマガID
メルマガを特定するIDです。
RSSフィード
RSSを登録すると、更新情報を受け取ることができます。

― メルマガ形式 ―

  • PC向け
    パソコンでの閲覧に最適化したメルマガ
  • 携帯向け
    スマートフォンやフィーチャーフォンでの
  • PC・携帯向け
    PC・携帯どちらでも快適にご購読いただけます。
  • テキスト形式
    文書だけで構成された、一般的なメールです。
  • HTML形式
    ホームページのように文字や画像が装飾されたメールです。
  • テキスト・HTML形式
    号によって形式が変更する場合があります。

閉じる

メールマガジン最新号

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ いますぐ実践! Linux システム管理 / Vol.280 / 読者数:2829名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

こんばんは、うすだです。

かなり久しぶりに、家族で2泊3日の旅行をしてきました。
(泊まりがけでは、実に7年ぶりの家族旅行でした。)

我が家で旅行をするとなると、お金と、家族みんなの休暇を合わせる、と
いう問題の他に、飼っているオカメインコさんたちの世話をどうするか、
という大きな問題が立ちはだかります。

本来、鳥は、2〜3日くらいなら、人間がいなくても問題ありません。
その間の餌と水を置いておけば、必要な分だけ勝手に食べてくれます。

…ですが、我が家の鳥さんたちは、人間がご飯を食べているときしか餌を
食べない、という困った習性があります。

ですので、嫁の知り合いで、鳥の世話の経験が豊富な方に、ちょくちょく
来てもらうことにしました。

さらに、スマホから映像をみたり方向を変えられるカメラと、ラズパイに
カメラをつないだものを部屋に設置し、旅先から映像で確認できるように
しました。(後者は、前者が動かなかったときのための予備です。)

これらのおかげで、比較的安心して旅行することができました。

あとは、カーテンの開け閉めを遠隔でできれば完璧だったと思います。
次の旅行までに、ラズパイか何かで実現したいと考えています。

…次の家族旅行はもうないかも…ですが、今回もはりきってまいります。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 今回のお題 - SSH を使って複数のマシンで処理をする (レベル:初級)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

今回こそは、Kubernetes の最終回を…と思っていたのですが、現在出張
中で、試すことすらできておりません。

そのため、最近、SSHを使って実際に行ったことを、まとめてご紹介する
ことで、お茶を濁したいと思います。

普段、sshコマンドを、リモートマシンへログインするためのものとして
使っておられるのではないかと思います。(少なくとも私はそうです。)

ですが、引数にコマンドを指定すると、そのコマンドを実行したら終わり
にすることができます。
たとえば、sshの実行時にlsコマンドを引数に指定すると、lsコマンドを
実行して終了した時点でログアウトします。

……………………………………………………………………………………
$ ssh remote_machine ls
fox@remote_machie's password:
nohup.out
tmp
$
……………………………………………………………………………………

これを利用して、複数のマシンに処理を行わせると、いろいろ便利です。
…という感じの、もやっとした内容を今回はお送りします。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ パスフレーズなしの鍵ペアを作る

本題に入る前に、パスフレーズなしのSSHの鍵ペアを作り、SSHでログイン
する際にその鍵を使うようにしてみましょう。

パスフレーズなしの鍵ペアを作らなくても、後述の例を実行できますが、
実行時に毎回パスワードを聞かれるため、ちょっと面倒です。
また、cron などで自動的に実行することができないため、不便です。

SSHの鍵ペアを作るには、「ssh-keygen」コマンドを使います。
そのまま実行すると、保存するファイル名とパスフレーズを聞かれます。
パスフレーズを入力せずリターンキーだけを押すと、パスフレーズなしの
鍵ペアを作成できます。

……………………………………………………………………………………
$ sshe-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fox/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): (リターンキーを押す)
Enter same passphrase again: (リターンキーを押す)
Your identification has been saved in /home/fox/.ssh/id_rsa.
Your public key has been saved in /home/fox/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AB0C1DEfghi/2jk3lMNOPQRs45tuVwxYZA6BcDEFghI fox@room42
The key's randomart image is:
+---[RSA 2048]----+
| .+.+ ..= .=|
...
| o . .|
+----[SHA256]-----+
……………………………………………………………………………………

ホーム直下の「.ssh」というディレクトリに、秘密鍵である「id_rsa」と
公開鍵である「id_rsa.pub」ができます。
(鍵のファイル名を明示的に指定していれば、その名前になります。)

……………………………………………………………………………………
$ ls -l ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
-rw------- 1 fox fbi 1675 10月 7 21:54 /home/fox/.ssh/id_rsa
-rw-r--r-- 1 fox fbi 393 10月 7 21:54 /home/fox/.ssh/id_rsa.pub
……………………………………………………………………………………

これを、「myserver」というマシンへログインするときに使うようにする
には、SSHの設定ファイル「~/.ssh/config」に以下を追加します。
(ファイル名が異なる場合は、適宜変更してください。)

……………………………………………………………………………………
Host myserver
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
……………………………………………………………………………………

もし config ファイルがなければ、下記のように作成します。
自分しか見ることのできないパーミッションにしておきます。

……………………………………………………………………………………
$ cat > ~/.ssh/config << EOF
Host myserver
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
EOF
$ chmod go-rwx ~/.ssh/config
……………………………………………………………………………………

そして、myserverの「~/.ssh/authorized_keys」に公開鍵を追加します。
id_rsa.pubをコピーした後、authorized_keysがある場合は追記します。

……………………………………………………………………………………
$ cat id_rsa.pub >> authorized_keys
……………………………………………………………………………………

ない場合は、id_rsa.pub を authorized_keys にします。
自分以外の人には見られないよう、パーミッションを変更します。

……………………………………………………………………………………
$ mv id_rsa.pub authorized_keys
$ chmod go-rwx authorized_keys
……………………………………………………………………………………

試しに、myserver へログインし、パスフレーズの入力なしでログインが
できることを確認します。
なお、そのマシンに SSH で一度もログインしたことがない場合、以下の
ように known_hosts ファイルへサーバの鍵を追加するか聞かれます。

……………………………………………………………………………………
$ ssh myserver
The authenticity of host 'myserver (192.168.1.1)' can't be established.
ECDSA key fingerprint is SHA256:秘密.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'myserver,192.168.1.1' (ECDSA) to the \
list of known hosts.
Last login: Sat Oct 6 23:34:32 2018 from 192.168.1.2
$
……………………………………………………………………………………


それでは、いくつか例を示していきます。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ 音声入力と出力を別のマシンで行う

冒頭の旅行時に、出先で、こちらの声を、家にいる鳥さんに聞かせたり、
逆に鳥さんの声を聞きたい、というニーズがありました。

前者の場合、ローカルホストで音声を入力し、リモートマシン(myserver)
でその音声を再生できればよいですよね。

というわけで、以下のように実行すれば、実現できます。

……………………………………………………………………………………
$ arecord | ssh myserver aplay
……………………………………………………………………………………

ローカルホストで「arecord」コマンドにより入力した音声を、パイプで
標準出力に渡します。
それを受け取るのは、myserver で起動した「aplay」コマンドです。

逆に、後者の場合は、リモートマシンで入力した音声をローカルホストで
再生すればよいですね。それには、以下のように実行します。

……………………………………………………………………………………
$ ssh myserver arecord | aplay
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ メールサーバでメールを出す

ローカルホストではメールを出せないけれど、メールサーバにログインを
すれば、「Mail」コマンドなどでメールを出せる、という場合、メールの
内容を渡してMailコマンドを実行すれば、解決します。

たとえば、dfコマンドの出力を「dana」さんにメールで送るには、以下の
ように実行します。

……………………………………………………………………………………
$ df -h | ssh myserver Mail -s 'df\ of\ localhost' dana
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ ディレクトリやファイルにWebでアクセスできるか確認する

Webサーバにあるディレクトリやファイルに、HTTPでアクセスできるか、
あるいはできないかどうかを、確認してみましょう。

たとえば、ドキュメントルート「/var/www/html」の直下にあるファイル
やディレクトリにアクセスできるかどうかを確認するには、以下のように
実行します。

……………………………………………………………………………………
$ ssh myserver ls -1a /var/www/html | while read file; do
> wget -q -O /dev/null http://myserver/$file
> echo $file : $?
> done
. : 0
.. : 0
.htaccess : 8
css : 0
fonts : 0
index.html : 0
secret : 6
public : 0
……………………………………………………………………………………

/var/www/html直下のファイルまたはディレクトリと、「wget」コマンド
でアクセスしたときの終了コードを出力しています。

終了コードが 0 の場合は、アクセスできています。
6 の場合は、認証が必要なためアクセスできていません。
8 の場合は、Webサーバがエラーを返しておりアクセスできていません。

つまり、.htaccessやsecretにアクセスできていないことになりますが、
その名前から推測する限りでは、正しい動作のように思われます。

さらに、その結果をメールサーバに渡してメールしてもらってもよいかも
しれません。

……………………………………………………………………………………
$ ssh webserver ls -1a /var/www/html | while read dir; do
> wget -q -O /dev/null http://myserver/$dir
> echo $dir : $?
> done | ssh mailserver Mail -s 'web\ access\ result' john
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ おわりに

以上、SSHを使って複数のマシンに処理させる方法をご紹介しました。

ようするに、データを標準入出力で扱えるなら、SSHとパイプを使用して
別のマシン同士でやりとりできる、ということです。

あとは使い方次第です。いろいろ思案してみてください。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 宿題の答え
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

前回の宿題は、

上限を超えた数の引数を指定してxargsが動くことを確認しましょう。

でした。

前回おしらせしましたが、上限は getconf ARG_MAX で得られます。

……………………………………………………………………………………
$ getconf ARG_MAX
2097152
……………………………………………………………………………………

実行できるかどうかを確認したいだけなので、seq コマンドで数字の羅列
を作り、これを渡してみたいと思います。

……………………………………………………………………………………
$ echo $(seq $(getconf ARG_MAX))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 \
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 \
...
2097139 2097140 2097141 2097142 2097143 2097144 2097145 2097146 \
2097147 2097148 2097149 2097150 2097151 2097152
……………………………………………………………………………………

これを引数に指定して ls コマンドを実行しようとすると、以下のように
叱られてしまいました。

……………………………………………………………………………………
$ ls $(seq $(getconf ARG_MAX))
bash: /bin/ls: 引数リストが長すぎます
……………………………………………………………………………………

ですが、xargs コマンド経由だと、叱られることなく実行できます。

……………………………………………………………………………………
$ seq $(getconf ARG_MAX) | xargs ls
ls: '1' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '2' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '3' にアクセスできません: そのようなファイルやディレクトリはありません
...
ls: '2097151' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '2097152' にアクセスできません: そのようなファイルやディレクトリはありません
……………………………………………………………………………………

なお、先ほど、echo コマンドでは実行できてしまっていますが、これは
シェルの内部コマンドだからだと思われます。/bin/echo で試すと、以下
のように実行されません。

……………………………………………………………………………………
$ /bin/echo $(seq $(getconf ARG_MAX))
bash: /bin/echo: 引数リストが長すぎます
……………………………………………………………………………………

もちろん、xargs 経由だと、実行できます。

……………………………………………………………………………………
$ seq $(getconf ARG_MAX) | xargs /bin/echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 \
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 \
...
……………………………………………………………………………………


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 今回の宿題
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

今回の宿題は、

「df -h | ssh myserver Mail -s 'df\ result' dana」のように空白の
手前に「\」を入れているのはなぜか調べてみましょう。

です。

「\」を削るとどうなるかを、まず試してみていただければと思います。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ あとがき
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

というわけで、現在、ホテルでこれを書いております。

クリーニングサービスを利用したり、自分で洗濯をすればいいやと思い、
着替えをあまり持ってきていません。

ですが、ここのところ暑い日が続いており、思ったよりも着替えが必要に
なっております。

そして、悲しいことに、泊まっている&泊まる予定のホテルにはいずれも
クリーニングサービスがないため、外のクリーニング屋さんを利用せざる
をえません。

まだ近くにクリーニング屋さんがあるうちはよいのですが、明日から行く
ホテルの周辺には、クリーニング屋さんがありません。
いえ、クリーニング屋さんどころか、あらゆる店がほとんどありません。

仕方がないので、今日、シャツとズボンを急遽買いに行きました。
しかし、そんなときですら、なるべく安く済ませたい、という欲を捨てる
ことができず、あちこちの店を探し回ってしまいました。

結局、ユニクロと某紳士服屋さんのワゴンから召喚しました。
日本の景気をよくする行為とかけ離れていること、時間と体力を浪費した
ことに、深く反省しております。


今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、11月4日に発行したいと思っております。


「いますぐ実践! Linux システム管理」はこちらです。
メルマガの解除、バックナンバーなども、以下からどうぞ。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

その他、作者に関するページは、概ね以下にございます。
http://www.usupi.org/kuri/ (main)
http://usupi.seesaa.net/ (blog)
http://twitter.com/kuriking/ (twitter)
http://facebook.com/kuriking3 (facebook)
https://jp.pinterest.com/kuriking/ (pinterest)
https://www.instagram.com/kuri_king_/ (instagram)
メルマガ全文を読む
 

▲ページトップへ

▲ページトップへ