OpenSSH 7.2で入ったssh-keygenの新機能を試す

OpenSSH 7.2リリースネタ続きです.

ここではssh-keygenの新機能を試してみます.

鍵のコメント変更

先ずは鍵のコメント変更.

* ssh-keygen(1): allow ssh-keygen to change the key comment for all
supported formats.

ssh-keygen(1): すべてのサポートする形式について ssh-keygen が
鍵のコメントを変更できるようにする

manやhelpを見ると-cオプションのようです.

    -c      Requests changing the comment in the private and public key files.  This operation is only supported for RSA1 keys.  The program will prompt for the
            file containing the private keys, for the passphrase if the key has one, and for the new comment.
$ ~/usr/local/openssh-portable/bin/ssh-keygen --help |& grep '\-c'
       ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]

適当な鍵を作って書き換えてみました.test commentchange commentに書き換わりました.手で書き換えるとミスすることもあるのでいいかもしれません.

$ ssh-keygen -t ed25519 -N '' -C "test comment" -f ./testkey
$ cat ./testkey.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBYXP3okrQO7hejY7f0d6PvjD++puLFuvozI5Trxv8D test comment
$ ~/usr/local/openssh-portable/bin/ssh-keygen -c -C "change comment" -f ./testkey
Key now has comment 'test comment'
The comment in your key file has been changed.
$ cat testkey.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBYXP3okrQO7hejY7f0d6PvjD++puLFuvozI5Trxv8D change comment

標準入力からの鍵の読み込みと鍵指紋の表示

-fオプションのファイルの代わりに-を指定すると標準入力から鍵を読み込みます.ファイル指定の場合は秘密鍵も公開鍵もいけますが,標準入力からだと公開鍵のみのようです.

$ cat ./testkey.pub | ~/usr/local/openssh-portable/bin/ssh-keygen -lf -
256 SHA256:v7zpU4SoiUIIEqWhaftbuUy2t2Tuny9Ld5WVrDD2Sjs change comment (ED25519)
$ cat ./testkey | ~/usr/local/openssh-portable/bin/ssh-keygen -lf -
(stdin) is not a public key file.
$ ~/usr/local/openssh-portable/bin/ssh-keygen -lf ./testkey.pub
256 SHA256:v7zpU4SoiUIIEqWhaftbuUy2t2Tuny9Ld5WVrDD2Sjs change comment (ED25519)
$ ~/usr/local/openssh-portable/bin/ssh-keygen -lf ./testkey
256 SHA256:v7zpU4SoiUIIEqWhaftbuUy2t2Tuny9Ld5WVrDD2Sjs change comment (ED25519)

host鍵全部とかはこんな感じで行けますね.

$$ cat /etc/ssh/ssh_host_*_key.pub | ~/usr/local/openssh-portable/bin/ssh-keygen -lf -
521 SHA256:WdWtCQFxH+Xno527Cl+PomQ5ZKj81/NUzIzYOckXsWA root@x220 (ECDSA)
256 SHA256:rONiKpthZZORiwOKpfNVcrMp+FgBhfE20GuCuuNrgA8 root@x220 (ED25519)
4096 SHA256:o2xTrmNmkd2RwNybmaO+TWIFw6xeoZmXmbLdhC1gIpU root@x220 (RSA)

ファイルに含まれる複数の公開鍵の指紋表示

* ssh-keygen(1): allow fingerprinting multiple public keys in a
file, e.g. “ssh-keygen -lf ~/.ssh/authorized_keys” bz#1319

ssh-keygen(1): ファイルに含まれる複数の公開鍵の指紋表示を
できるようにする. つまり
“ssh-keygen -lf ~/.ssh/authorized_keys” bz#1319

こちらの場合も秘密鍵の鍵指紋は取得できないです.ちなみにエラーなどは出ずスキップされます.

$ ssh-keygen -t ed25519 -f /tmp/hoge_key
$ ssh-keygen -t ed25519 -f /tmp/hoge2_key
$ cat /tmp/hoge_key.pub /tmp/hoge2_key.pub > /tmp/keys.pub
$ ~/usr/local/openssh-portable/bin/ssh-keygen -l -f /tmp/keys.pub
256 SHA256:/fZluTkiB9Ogv3mT9mniaZ2YPbL2XkMwge+bQ0r74dg mk@x220(ED25519)
256 SHA256:iHSZ0ucbwTR0VLScSF5l29iBFQIT13I+fELvue/N+xM mk@x220(ED25519)
$ cat /tmp/hoge_key.pub /tmp/hoge2_key > /tmp/keys.mix
$ ~/usr/local/openssh-portable/bin/ssh-keygen -l -f /tmp/keys.mix
256 SHA256:/fZluTkiB9Ogv3mT9mniaZ2YPbL2XkMwge+bQ0r74dg mk@x220(ED25519)
$ cat /tmp/hoge_key.pub /tmp/hoge2_key /tmp/hoge2_key.pub> /tmp/keys.mix
$ ~/usr/local/openssh-portable/bin/ssh-keygen -l -f /tmp/keys.mix256 SHA256:/fZluTkiB9Ogv3mT9mniaZ2YPbL2XkMwge+bQ0r74dg mk@x220(ED25519)
256 SHA256:iHSZ0ucbwTR0VLScSF5l29iBFQIT13I+fELvue/N+xM mk@x220(ED25519)

#見づらいですね><

-vを付けると秘密鍵のところでnot a public keyと言われるようになります.

$ ./ssh-keygen -l -v -f /tmp/keys.mix
256 SHA256:/fZluTkiB9Ogv3mT9mniaZ2YPbL2XkMwge+bQ0r74dg mk@x220(ED25519)
+--[ED25519 256]--+
|            ..   |
|           .  .  |
|            .o   |
|         . . .o  |
|        S o +  . |
|         . = +. .|
|          o O.Oo=|
|           *=^oX*|
|           +@E&Bo|
+--[SHA256]---+
debug1: /tmp/keys.mix:2: not a public key
debug1: /tmp/keys.mix:8: not a public key
256 SHA256:iHSZ0ucbwTR0VLScSF5l29iBFQIT13I+fELvue/N+xM mk@x220(ED25519)
+--[ED25519 256]--+
|       .+.+**+*+.|
|     . = = +o*oB.|
|    o = + o +.B.o|
|   . + + .    .+o|
|    . . S      o+|
|         o     E.|
|        .       o|
|               +.|
|               o@|
+--[SHA256]---+



OpenSSH 7.2のsshdに入ったauthorized_keysの新オプションを試す

OpenSSH 7.2がリリースされました :)

ということで気になった以下の新機能を試してみます.

* sshd(8): add a new authorized_keys option “restrict” that includes
all current and future key restrictions (no-*-forwarding, etc.).
Also add permissive versions of the existing restrictions, e.g.
“no-pty” -> “pty”. This simplifies the task of setting up
restricted keys and ensures they are maximally-restricted,
regardless of any permissions we might implement in the future.

sshd(8): authorized_keys のオプションに “restrict” を追加する.
これは, (no-*-forwarding などの) 現在と将来のすべての制限を含む.
さらに, 現在の制限の許可バージョンも追加する. つまり,
“no-pty” -> “pty”. これにより, 制限付きの鍵の設定のタスクが
単純化し, 将来実装するすべての許可に関係なく
鍵が最大に制限されていることを圃場できる.

prefix以外は規定値のままでbuid

$ sudo apt install build-essentialbuild-essential
$ sudo apt build-dep openssh
$ git pull
$ ./configure --prefix=$HOME/usr/local/openssh-portable
$ make
$ make install

適当に7.2のデーモンを起動

$ `pwd`/sbin/sshd -D -p 22222
$ ps -ef|grep openssh-portable
mk       21788 14885  0 00:46 pts/7    00:00:00 /home/mk/usr/local/openssh-portable/sbin/sshd -D -p 22222

適当な鍵を作って~/.ssh/authorized_keysに登録してログインテスト.

$ ssh-keygen -t ed25519 -N '' -f ./testkey
$ cat testkey.pub >> ~/.ssh/authorized_keys
$ ssh localhost -p 22222 -i ./testkey

authorized_keysの該当鍵行の頭に

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFm5sR98q060FFlT1cpBVbwm0caShCYGl39D5k9PCenB mk@x220

restrictを追記して

restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFm5sR98q060FFlT1cpBVbwm0caShCYGl39D5k9PCenB mk@x220

ssh 7.2で接続を試します.

$ /home/mk/usr/local/openssh-portable/bin/ssh localhost -p 22222 -i ./testkey
PTY allocation request failed
printenv|grep -i ssh
SSH_CLIENT=::1 56910 22222
SSH_CONNECTION=::1 56910 ::1 22222
exit
Shared connection to localhost closed.

sshd側の機能なのでssh 7.1で繋いでも制限されます.

$ ssh localhost -p 22222 -i ./testkey
PTY allocation request failed
printenv|grep -i ssh
SSH_CLIENT=::1 56910 22222
SSH_CONNECTION=::1 56910 ::1 22222
Shared connection to localhost closed.

restrict,pty のようにptyを追記して-X/-Yを試すとptyが使えてXは制限されているのが確認できました.

$ grep restrict authorized_keys
restrict,pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFm5sR98q060FFlT1cpBVbwm0caShCYGl39D5k9PCenB mk@x220
$ ssh localhost -p 22222 -i ./testkey -X
X11 forwarding request failed
mk@x220:~$ xeyes
Error: Can't open display:

これまではずらずらと制限を書く必要がったのがシンプルに書けるようになりそうです :)

以下の件は別エントリにて


Raspberry Pi 4周年とRaspberry Pi 3の発売

祝4周年!
そして新しいRaspberry Pi 3 Bが発売になりました.

4年あっという間でしたね当初はなかなか入手出来ませんでしたが今は大分改善されて買いやすくなっていいですね.
そしてRaspberry Pi 3 BRaspberry Pi 3 B.(A+の基板で無線内蔵も出たら良さそう).新たにWi-Fi/Bluetoothが内蔵されました.CPUもARM64になったのでそっちを試してみたい場合も良さそうです.ケースは流用できそうですがLED位置が変更になってるので LEDが見えなくなる場合もありそう.無線があるってことで日本では技適が通ってなくて使えない……と良くなるのですが,未だ通ってないけど近日中に取れるみたいです!

しかし電源が2.5Aというのがかなりきつい気がします.家にある一番大きな電流を流せるmicroUSB B Cableでも2.4Aですから…….
私はとりあえず手持ちに5V 3AのACアダプタがあったのでこれをGPIO経由で流し込むようにしたら行けそうかなと思っています.通販サイトを見ると2.5A対応のACアダプタも併売されているのでそれを買ったほうが無難そうですね.

なお,技適は通る見込みだから英国などから次回に買おうという人向けに注意が.

ということで国外で買った電源は電力安全法の検査通ってないので電源は国内で買いましょう.PSEマークの付いたものを.

ところでUSB電源の規格ですが,多分こんな感じです.

USB 2.0
- 500mA
USB 3.0
- 900mA
USB Battery Charging 1.2
- 1.5A
USB Power Delivery Specification( http://www.usb.org/developers/powerdelivery/ )
- 12V/3A (36W)
- 12V/5A (60W)
- 20V/3A (60W)
- 20V/5A (100W)
※microUSBでは3A迄

Raspberry Pi 3 Bの5V 2.5Aは範囲外な感じがします.USB PDは3AまであるけどUSB Cの規格みたいですし.火を噴いたりしないかちょっと不安です.

OSの方ですが,Rasbian jessie/Ubuntu MATEが新しくなっているようです.(既存環境はupgradeするだけでok)そしてちょっと前からRasbian wheezyが居なくなっています(ftp siteにはアーカイブが残っていますけど).wheezyはjessieより軽いので初代を使うときとか用途によってはいいんですけどね.Raspberry Pi 3 Bでwheezyが動かせるかも気になります.
#そういえばRabianのサポートはどうなっているんだろう?Debianと同じならいいけどこの感じだともっと速くに打ち切られそうで怖い.

しかし久々に新製品を追いかける楽しみを味わいました.
あ,Raspberry Pi古いのが余っちゃったよって方はください.




内田美奈子「サーキットワンダラーズ」全話公開中

コミック化を待ってたのでやったーと思ったのですが,

orz
目当ての作品があるときはやっぱり雑誌を買ってアンケート送らないとダメですね…….

とりあえず気を取り直して読みました.
BOOM TOWNの後のお話でBOOM TOWNのことなんかはあまり説明はされてないので未読の方はBOOM TOWNも読むといいかもしれません.マンガ図書館Zで公開されてますし.

あまり現実世界は出てこなくて仮想世界での話が中心.BOOM TOWNでアシスタント(小さなリタ)やデバッガたちのような能力を得たところまででした.ここで終わるのは勿体無いな.

ちなみにBOOM TWONは雑誌掲載時からのファンで紙本も初版(乱丁),乱丁直った版,布教用と3セット持ってたりも.クラウドファンディングでPDFも入手しているので本の痛みも気にしなくて良くなりました.
個人的にxxのテンションが下がった時に読んでテンションを上げる本というのが幾つかあって,BOOM TOWMはコンピュータ関係のテンションを上げたい時に読む本になってます.ネオアキバ行きたい.ハッセイとちまちまデバッグしたりしたい.

facebookにアクセスできなくなっていたのを復旧

結構長いことfacebookにログイン出来ない状態になってました.
ログインしようとすると電話番号を求められたりしてめんどくさくて放置という感じでした.

20160229_02:02:27-5248

ヘルプを見ると身分証を送れとなっててそれは嫌だなぁと.

20160229_02:02:53-5465

しかし先ほどCritical Mass Tokyoのfacebook pageがあるのを知ってここをチェックしたくなりました.

IMGP9452
#これは2007年の写真.日本のクリティカル・マスは海外のように過激じゃない.

ということで以前利用できていたiPadのfacebookアプリでどうにかならないかなと試すと,ID/Passwordを入力した後トークンを求められます.

29 - 3

確か保存してあったはずと探しとありました.これを入力することでiPadでは入ることが出来ました.
facebookでの設定はこの辺.

しかしやっぱりPCでは入れない.iPadで「お知らせ」を見ると

最近、認識されないデバイスからアカウントへのログイン試行がありました。このログインに心当たりがあるかどうかをご連絡下さい。

という項目が.どうもロックされているようです.以下のようにポチポチたどっていくとロックが解除できてその後ログイン出来るようになりました.

29 - 4

29 - 5
#そう家のIPはよく浜松と言われる……

29 - 6

今回はパスコードのバックアップがあったので復旧出来ましたがロックされちゃうと面倒ですね.
とりあえず自作トークン発行アプリにfacebookも入れときますか.

てことでアクセスできるようになりましたが,例えばこのblogのfeedも流しこんでるけどこんな感じでアクセスも無いしアカウント作り直してもいいような感じではありました.(LINEの時もそんな感じだったな……)

20160228_06:02:50-10317

GNU版xargsの区切り文字を指定できる-d optionが便利

よくスペース混じりのファイルなんかの処理にfind -print0xargs -0でNULL区切り文字を使いますが,

$ find . -type f | xargs ls
ls: ./ho にアクセスできません: そのようなファイルやディレクトリはありません
ls: ge にアクセスできません: そのようなファイルやディレクトリはありません
./fuga  ./piyo
$ find . -type f -print0 | xargs -0 ls
./fuga  ./ho ge  ./piyo

今回間に更に処理を入れて使えませんでした.
逐次実行でよかったらxargs -n1 -I{} rm '{}'みたいにして括ればいいんですが,

$ find . -type f -print | grep -v fuga | xargs -n1 -I{} ls '{}'
./ho ge
./piyo

今回は一度に処理したかったのでこの方法は使えません.xargsのmanを見るとdelimiterを指定できるのに気づきました.

   --delimiter=delim, -d delim
          Input  items are terminated by the specified character.  The specified delimiter may be a single character, a C-style character escape such as \n, or
          an octal or hexadecimal escape code.  Octal and hexadecimal escape codes are understood as for the printf command.    Multibyte  characters  are  not
          supported.  When processing the input, quotes and backslash are not special; every character in the input is taken literally.  The -d option disables
          any end-of-file string, which is treated like any other argument.  You can use this option when the input consists of simply newline-separated items,
          although it is almost always better to design your program to use --null where this is possible.

ということで改行(\n)を指定してやりたかったことが実現できました :)

$ find . -mmin -1440 -type f -print0 | xargs -0n1 file | grep -i audio | cut -f1 -d: | xargs -d\\n ls -1tr

OpenSSHのHostKeyにED25519を追加

ふとあるhostにED25519のサーバ鍵がないのに気づいたので作りました.

ファイル名を指定して作るか,

$ sudo ssh-keygen -N '' -f /etc/ssh/ssh_host_ed25519_key
Generating public/private rsa key pair.
Your identification has been saved in ./ssh_host_ed25519_key.
Your public key has been saved in ./ssh_host_ed25519_key.pub.
The key fingerprint is:
f3:55:7f:02:04:92:c3:e0:4c:8c:7a:05:6a:00:28:da root@micro
The key's randomart image is:
+--[ RSA 2048]----+
|=   .+oo.....    |
|o. ..+o +. .     |
|o.o. .o  .  . .  |
|..E .        o . |
|   .    S   . . o|
|         o .   ..|
|          .      |
|                 |
|                 |
+-----------------+

ssh-keygen -Aで足りないものを自動生成してもらいます.-Aの場合鍵指紋が出てこないので`ssh-keygen -lfとかで確認しましょう.

$ sudo ssh-keygen -A
ssh-keygen: generating new host keys: ED25519
$ cat /etc/ssh/ssh_host_ed25519_key.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINYCcWp86jHwcb56mvdFMpCjovBH8eAa99OufTUEYycU root@micro
$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key
256 bf:f8:4a:5b:2d:da:72:84:e7:87:25:1b:9d:1c:56:b2  root@micro (ED25519)

規定値で有効になっていると思うけど設定ファイルにも記述してデーモンをreload.

$ grep ed25519 /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_ed25519_key
$ sudo service ssh restart

ed25519で帰ってくるか確認.

$ ssh-keyscan -p 2222 -t ed25519 localhost
# localhost SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6
localhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINYCcWp86jHwcb56mvdFMpCjovBH8eAa99OufTUEYycU

クライアント側のknown_hostsから古いものを消して登録しなおして,

$ ssh-keygen -f ~/.ssh/known_hosts -R [192.168.1.102]:2222
$ ssh -o HostKeyAlgorithms=ssh-ed25519 micro
The authenticity of host '[192.168.1.102]:2222 ([192.168.1.102]:2222)' can't be established.
ED25519 key fingerprint is SHA256:H8TMbIG65XqBAeiST98ThJq/Ux7RHerpMGXnxVJ7EjE.
+--[ED25519 256]--+
|   . .   .. E.   |
|  . o . .=..o.   |
| o o o o oB+ o   |
|o =   = *o+ = .  |
| + o . %S+.o o   |
|  . o X =...     |
|     + B ..      |
|    o o o        |
|     . .         |
+----[SHA256]-----+
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.1.102]:2222' (ED25519) to the list of known hosts.
 

後はDNSに登録したり……ってed25519はエラーになるみたいですね.

$ ssh-keygen -r example.org -f /etc/ssh/ssh_host_ed25519_key
export_dns_rr: unsupported algorithm and/or digest_type

ちなみにED25519はOpenSSH 6.5p1で入りました.

find+rsyncで特定期間のファイルだけ同期する

小ネタですが.
~mk/POD以下から内容更新日時が1440分(1日)以内のファイルを探して同期しています.

cd ~mk/POD ; find . -mmin -1440 -type f -print0 | rsync --delete --progress --files-from=- --from0 ~mk/POD/ /var/www/owncloud/data/matoken/files/podcast/

findコマンドで欲しいファイルを探し,rsyncでその結果を同期しています.
–files-fromに-をつけることでfindで検索したファイルを標準入力から受け取っています.
便利 :)

一応オプションの詳細

  • find
    -mmin -1440 : 内容更新日時が1440分(1日)以内
    -type f : ファイルを検索
    -print0 : 区切り文字をNULLにする

  • rsync
    –delete–delete : 無くなったファイルは削除する
    –progress : プログレスを表示
    –files-from=- : STDINから同期元ファイルリストを読み込む
    –from0 : 区切り文字をNULLとして扱う

ownCloudの同期が動かなくなって困る

ownCloudを便利に使っているのですが,ふと気づくと同期されていない.ステータスを見ると最後の同期が8時間前.タスクマネージャーのアイコンは!マークが付いて「不明な状態」となっています.

20160226_19:02:52-398

ログを見てもよくわからない.

WebやAndroidそして別のLinuxマシンは問題ないようです.ということは多分この端末の問題.
問題の環境はDebian stretch testing amd64のowncloud 7.0.12~dfsg-2です.

一旦ownCloudを終了して設定ファイルだけ退避(対象ファイルはそのまま)して設定を作りなおしてみました.

$ mv ./.local/share/data/ownCloud ./.local/share/data/ownCloud-backup
$ owncloud --logwindow

とりあえず同期出来たようです.

rc-gui最新版のビルドメモ(20160226)

Rasbian jessieのGUIな設定ツールのrc-guiの言語ファイルの項目が増えているみたいなので試してみました.

Wi-FiのCountry Code辺りが増えてるみたいなんだけど画面上に見当たらないです.
対応デバイス繋がないと出ないのかな?

20160226_00:02:02-20553

訳はこんな感じ?

20160226_01:02:13-6226

とりあえずrc-guiはビルドに必要なパッケージ増えてたのでメモしておきます.
controlには未だ載ってないよう.

$ sudo apt-get build-dep rc-gui
$ git pull
$ ./configure --prefix=/opt/local
   :
configure: error: Package requirements ( gtk+-2.0 >= 2.18.0              libxml-2.0) were not met:
 
No package 'libxml-2.0' found
   :
$ sudo apt install libxml2-dev
$ ./configure --prefix=/opt/local
$ make
$ sudo make install