OpenSSH – matoken's blog https://matoken.org/blog Is there no plan B? Thu, 04 Apr 2024 11:36:18 +0000 ja hourly 1 https://wordpress.org/?v=7.0.2 https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9-32x32.jpeg OpenSSH – matoken's blog https://matoken.org/blog 32 32 SSH鍵を使った暗号化,復号化が出来る age https://matoken.org/blog/2024/04/04/age-that-can-encrypt-and-decrypt-using-ssh-keys/ https://matoken.org/blog/2024/04/04/age-that-can-encrypt-and-decrypt-using-ssh-keys/#comments Thu, 04 Apr 2024 11:36:16 +0000 https://matoken.org/blog/?p=4007

age という暗号化ツールを知りました.この age では ssh の公開鍵を使って暗号化,秘密鍵で復号化が出来るのが面白そうなので少し試してみました.

logo

install

今回は Upstream とバージョンは同じだし Raspberry Pi OS bookworm armhf のパッケージを利用しました.
go install での導入も Go が入っていれば簡単,GitHub の releases にもいくつかのバイナリがあります.
その他各種環境にもパッケージがあるようです.

Raspberry Pi OS への age パッケージ導入
$ sudo apt install age
$ age --version
1.1.1
$ dpkg-query -W age
age     1.1.1-1+b3
$ age
Usage:
    age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT]
    age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT]
    age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]

Options:
    -e, --encrypt               Encrypt the input to the output. Default if omitted.
    -d, --decrypt               Decrypt the input to the output.
    -o, --output OUTPUT         Write the result to the file at path OUTPUT.
    -a, --armor                 Encrypt to a PEM encoded format.
    -p, --passphrase            Encrypt with a passphrase.
    -r, --recipient RECIPIENT   Encrypt to the specified RECIPIENT. Can be repeated.
    -R, --recipients-file PATH  Encrypt to recipients listed at PATH. Can be repeated.
    -i, --identity PATH         Use the identity file at PATH. Can be repeated.

INPUT defaults to standard input, and OUTPUT defaults to standard output.
If OUTPUT exists, it will be overwritten.

RECIPIENT can be an age public key generated by age-keygen ("age1...")
or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").

Recipient files contain one or more recipients, one per line. Empty lines
and lines starting with "#" are ignored as comments. "-" may be used to
read recipients from standard input.

Identity files contain one or more secret keys ("AGE-SECRET-KEY-1..."),
one per line, or an SSH key. Empty lines and lines starting with "#" are
ignored as comments. Passphrase encrypted age files can be used as
identity files. Multiple key files can be provided, and any unused ones
will be ignored. "-" may be used to read identities from standard input.

When --encrypt is specified explicitly, -i can also be used to encrypt to an
identity file symmetrically, instead or in addition to normal recipients.

Example:
    $ age-keygen -o key.txt
    Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
    $ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
    $ age --decrypt -i key.txt -o data.tar.gz data.tar.gz.age

age key での利用

age-keygen コマンドで age 用の鍵ペアが生成できます. public key を共有します.

鍵の生成
$ age-keygen -o key.txt
Public key: age1asle7pc9uj5n3fxamxst286ejh24yv5nut0qtedmadsxdm38egvs6ez9jr
$ cat key.txt
# created: 2024-03-30T04:44:49+09:00
# public key: age1asle7pc9uj5n3fxamxst286ejh24yv5nut0qtedmadsxdm38egvs6ez9jr
AGE-SECRET-KEY-1VZVZ0VXNSP7D3XN6X545MT7EX89S2Z7F68G6CG0RZ9WKMGN0CW4STSVM26
$ age-keygen -o key2.txt
Public key: age1vz7kedcgzvzk4n4ke50wdxthll9g3muhgwlv3vz37g926frzjvvst777qe

age public key で暗号化,age secret key で復号化します.

鍵で暗号化,復号化
$ echo 'plain' > data
$ age -o data.age -r age1asle7pc9uj5n3fxamxst286ejh24yv5nut0qtedmadsxdm38egvs6ez9jr data (1)
$ age --decrypt -i key.txt -o - data.age (2)
plain
$ age -o data.age -r age1asle7pc9uj5n3fxamxst286ejh24yv5nut0qtedmadsxdm38egvs6ez9jr \
    -r age1vz7kedcgzvzk4n4ke50wdxthll9g3muhgwlv3vz37g926frzjvvst777qe data (3)
$ age --decrypt -i key.txt -o - data.age (4)
plain
$ age --decrypt -i key2.txt -o - data.age (5)
plain

パスフレーズで暗号化,復号化

暗号化
$ age --passphrase -o data.age data (1)
Enter passphrase (leave empty to autogenerate a secure one):
Confirm passphrase:
$ age --passphrase -o data.age data (2)
Enter passphrase (leave empty to autogenerate a secure one):
age: using autogenerated passphrase "resist-host-rabbit-rapid-choose-slender-legal-ramp-forward-scare"
$ age --passphrase --armor data (3)
age: using autogenerated passphrase "what-open-rifle-junior-meadow-grass-hurdle-cigar-hybrid-slide"
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNjcnlwdCBxcGxLRjNySGliS3ZyUmUz
Tm5MMnVRIDE4ClQzVUhlUmJlSGQrSmdUcU1xaEo0ZkFUcGpLWGZpUnBEbjNPbDMy
WDk4ZHcKLS0tIFRic2twRVFOVkJ3a2Y3UWZ3WEdxcG5iSi9qWk5TU1UydWllVG1G
NlBmMkkKh1ok+t0EGZrBXEQujdb6JQLcIGyZXcnvJrAetajKdVImFUCHXu0=
-----END AGE ENCRYPTED FILE-----
  1. 自分で決めたパスフレーズで暗号化します
  2. パスフレーズを入力しないと age がパスフレーズを自動生成してくれます.
  3. -a/–armor オプションで PEM 形式で出力.
復号化
$ age --decrypt -o - ./data.age
Enter passphrase:
plain
$ echo '-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNjcnlwdCBxcGxLRjNySGliS3ZyUmUz
Tm5MMnVRIDE4ClQzVUhlUmJlSGQrSmdUcU1xaEo0ZkFUcGpLWGZpUnBEbjNPbDMy
WDk4ZHcKLS0tIFRic2twRVFOVkJ3a2Y3UWZ3WEdxcG5iSi9qWk5TU1UydWllVG1G
NlBmMkkKh1ok+t0EGZrBXEQujdb6JQLcIGyZXcnvJrAetajKdVImFUCHXu0=
-----END AGE ENCRYPTED FILE-----' | age --decrypt -o -
Enter passphrase:
plain

ssh鍵で暗号化,復号化

これを試したかったのでした.

ed25519 で暗号化,復号化
$ age --armor -R ~/.ssh/id_ed25519.pub data
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGVSY0tCZyBZRUJD
NUZ6OWpQWDlzK2JKbmszaVp1ak9TQ0NZWkxoM0JuRlhtTm1hNVdFCjZqV0RlRldI
cjY4TDJJR1hRckxNUkw2QmoreGVoRURzRGhRYllZUjBXck0KLS0tIEJBaFVXa3J0
RHFobkVzUnRLaDZaUDVHdnpTbklHYmozQThKKzVKT3haUkEKaRkef04BHGL2sDPy
B9hl8CCpgJ57fOZtLBG8tPruAz5uASNhJss=
-----END AGE ENCRYPTED FILE-----
$ echo '-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGVSY0tCZyBZRUJD
NUZ6OWpQWDlzK2JKbmszaVp1ak9TQ0NZWkxoM0JuRlhtTm1hNVdFCjZqV0RlRldI
cjY4TDJJR1hRckxNUkw2QmoreGVoRURzRGhRYllZUjBXck0KLS0tIEJBaFVXa3J0
RHFobkVzUnRLaDZaUDVHdnpTbklHYmozQThKKzVKT3haUkEKaRkef04BHGL2sDPy
B9hl8CCpgJ57fOZtLBG8tPruAz5uASNhJss=
-----END AGE ENCRYPTED FILE-----' | age -d -i ~/.ssh/id_ed25519
plain
RSA で暗号化
$ echo 'plain' | age --armor -R ./rsa1024.pub
age: warning: recipients file "./rsa1024.pub": ignoring unsupported SSH key of type "ssh-rsa" at line 1
age: error: failed to parse recipient file "./rsa1024.pub": "./rsa1024.pub": no recipients found
age: report unexpected or unhelpful errors at https://filippo.io/age/report
$ echo 'plain' | age --armor -R ./rsa2048.pub
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1yc2EgNXd4UUtBCmxZY2ZKczFr
MkJ1akc2Y3JkUHQyN0JaRU1RTnN4NHFydjBwZE4vUml4d0JnZ0VQYnVxRUhXRFpx
WkRCOWxpSG4KTnUzZCsvNmFGSnM0MzNkdEpSRWVyUEl1VVgxOHR3NFd6alJMMUlH
Q3VYbTZDTDdYNUxoeTdnbE8zNlI5eWpCawpPMTVRZXhoTGNVWHRhRngybkVHVmxE
QXVTRFJKOEFIVFQwWXFFZHRrdmU4UVhiV0lwbFVtQ0Vzb1ZzTnlBNXc5CjN4VW02
a21MZGxxRmhtY1pOZ1NsQjlBS0RmL1o3M0xNZ0RVQXRXS3pVSDVXS1UramQ5V3Nv
NWhSZDBaYjhlSWkKTVUzM1dEZzltcWU3SEpPMGV6eG5ucHFqUGZDRWZ0eDNQNTUy
RmZxdHdXUzBZamlrLzNFaGdWajVTeXZBREF1VwpFN2x4S0VnR0N6WmIxeXFuTjUr
bGFnCi0tLSAzaytQQktGcHA4dG9OZjhGbGNZY2g1ZktUaHRsemxoNUNxeW9YTkVD
Q2NJCnEqtAa7v2TJGtQWC2CglKZ9YeX698uiW90pBq13wqwxFxe26eUb
$ echo 'plain' | age --armor -R ./rsa3072.pub
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1yc2EgZFNIbVJ3CmxTaERheUlS
RDJ2dE8wVXZrWDRKMStQYkl4SW5RVExYUWlLTHcxVjRFRVBSWEVnQk81TThVaG5u
QWZRYS9vVlQKZHppT25RYnZKaUFSbm5sSVhMZUVMTG1Fc2FPTUl4aFQvdmVEeXBG
b1dDQ1loMEdYM0QyKzNIN2V6eStlbkQ2ZQpFeVJJeFovd3FzUzZSS3pNMG9YeEtp
Qm0rYitkeWFIR2N2T05tMHB0RW5TTWRvelBmOXdpN0tjVlhZUS8xWGxJClJBMjk3
WDV5d3BBaFdWbWtFcjIyWHhHMy93cmsrUTd3cGdwaTAzMTN4M3RaQ0o5cUN3TzRw
cklrTGpVUVBRSE4KNnA4MHhvMVJ6LzduM0JHaTNKNFZKRURuSjhZNldoV1h2N3Qw
bTRMZ0xqaVkvOVJVR004a3A1bU9JSU9pK0ErKwpKdmtVcEphWk9zbzJ1eHdOV0k0
RXpBYm9jY3RneDNJSm9mcWQ4SzY5bERxUjV0bWhCRFB5K210M29VL1ZKVGwvCmo1
eHQ4eFRIaDVFTVBaMnRlbkFGLzNZWFA4NVpWVlloVUc1YnlrdUFRSTJqRXdGR3Vl
NkFWTjlyR05DQUxlMVcKN0xaQTA2bENBY09pZHNtL0dCcU5QVmFDQVVsNUI2eHlH
dUYyTkc2QXRZN0k1WUZXTHV3UGxPWDgvdlJoNnE4NgoKLS0tICtSSUV0bnRRSjU1
TUY3cjRJM3ZYV0x6ZXpLbXFnaEttYTZhY01nZzEzd28KLJcw48jawhSaZm1BZ7a1
Qm0770UO7troZcvViUfFJzHSXQsE4n4=
-----END AGE ENCRYPTED FILE-----
$ echo 'plain' | age --armor -R ./rsa4096.pub
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1yc2Egc0tyUVpRCnluWk1qUFdI
S2w3c3hmK0ZyMmcvUmZVWUpKejF0RTlSalVzKzQ1QkpCMklHUjlCcGJIeGFKSVNv
UVdSa2pRbnkKQm5OWHlocEUyQjZYZjRJanVkN2YyMWJKaThwd0hEWkkwQURnWUVF
bkxnR2ZSTktRRDdEWHZaYTVuVSsvYUY1UQpCa3lMdURsamhWdm52RE0yaE53QUxX
WnVaRWdPRExnL2lIYSs4SE9YZUlNTldidG5QTC9XQU1IUll2NTQ0RzBjCjJnL0lC
emtTdDlaNlpQM1JEbHRDdnROWmV3VTNpMDRxcDdabVU3bU5xODg4eUJ3dWZwYnpG
QWtnbWlzc3RVV2IKZkVnSmQyZ2pOaXluYmFhMllvZ0tKNzcwS3FBWlJtS29LNGYx
Y3dxSFV4UHZpcmJleHFFNXI5ekUxQzNlYzdIWgpackFqemdMV1JjRjdnY3RBTTky
bDlXVDVrQktjZkszQk12L3hlSDhHTllIdkVIS2FERUtCbWgyaUNad0NuRjRCCjZK
SUYxYXkyNE1oKzN5VUZ0a1VVQjRnOVBLRUF4VU0yOFJUcEtUZDU2OHFDT2djekxO
Y3o4eGhQay9vNnlMRDUKVm14KzlrS1hOU1JrYTVHYjBwZWZzYXVsNHhPMEY5bTJ4
ZWZZQW5LVVQxRjVBUUQ4eDBEbDNkRTFFTGNvL21Kcgp5YkkxR3FrMTJQdnA3MFFl
ckgvZjBvT3I2WlZ6Q1ZuM3JFeGczTXFwU3FCV3FWbVIrTk1sL0RSWEZwL2Q4NC9m
CjlDZUJ2NXZnQU5BUUNrVzdPODM1WUxFTzVrT3Q1VGZISThtSzJPb2xvVnU0R2g0
TlY5RmJnbWhJbnU3TGMvTHoKVEt1OUZwR1UvNlFEVmRnWHZvay8wSGhnZWgrcnRN
ZWZsRHd5YnlCS0ovNAotLS0gYWQ4WXBodENuNDBKVVkwK3c5YnpSeG5OdndCRWph
eW5aU1QvekRLWlhkdwpjWnxdCQrEjd0NbP2ed0AFRLYH94R8EQTGEyYDMwEuzhsk
M8fb2A==
-----END AGE ENCRYPTED FILE-----

RSA1024 だとエラーとなりました.現在 RSA は 3072 が規定値だったと思うので鍵帳の短い 1024 は足切りされているのかもしれないですね.

複数の鍵で暗号化
$ echo 'plain' | age --armor -R ./rsa2048.pub -R ./rsa3072.pub -R ./rsa4096.pub -R ~/.ssh/id_ed25519.pub
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1yc2EgNXd4UUtBCjFaajdDV3hh
dXRuNkNNRVpRTUJ2ZDI0ZkRObGdCRmpydlZNUDAzSjhXbGdsWXJZa1lyWnFzSFlo
bXFJbjNpSFYKcHZrWisyek1MWjZvVlJtV3djUEY1ei82bVFISzdwYm96a2FYeXRR
amdxTEhjWllCcGJsSytQN3ZWay82clZEZwp4bG5HSmVGNEFFVW5xMEx4UXhlT3A0
eHBONUhkbU1qRnRPUUFoR3BldzVhamFrc0xBWVp4Y001bUdqNGROT0dmCkhOUCtF
TytsbXRTU1Exait5bG9DRVR4ZjRTT3owY01JTGRyOUN4eWFnd0hmTDlOenlWRE12
a0ZrM2E4NkFweTEKMEZvZ3h2TzdOZlJ5YnVpYm1yOXFIUkV2MXI0QnZtT1VMTFRT
Z2JDOGI4VGpYRVROb3J1TzAvd2xYTHozSVdhOQoyMVFQNHBxb3AzaUQwa0hqeE5C
bEF3Ci0+IHNzaC1yc2EgZFNIbVJ3Cm9KcEoyZndZK0JCakFURWl2eUt4dHNqdExy
K0dzNkRpUXF1U0dJSXFIMlFWOFhGcGtkNFRXd1BuVGJBSmZhNkgKNjZZZStZZFFi
Wko2dXFkQ2hKMHVIcWV0ekVaeUhBOTJoSnZUWnFacmVFczE4UnllZnp4cXZCQWE4
ckdFNU5nbQpNaXB4eHhaUG1vWE5HQ2xoRkF5amVPL3kvaUlPL0h6ZVNtL05lV2VK
OGdkVmpGZjVSNVNOZ1NsbEc1b0NBODFlCkNQTTFWb3orNC9WVWdadThFN3YwUTNr
YXNCaDZ5KzBSckJpeEdZWllYMml0RmFpTWNZc3FEbHhXaUM0YTU1emMKbXRvQzh2
UG1lM1FWYzRreDJINGY1MEV0cnArTzdMaklVS1VWRE5haWV0UzlFOG9CN3U0dFNu
MU0vVFpYVXRoNwp5aHRDc2ZoWWVBeGZwWTlyQ2ZIVjcxczZ1ajJoVy93dDFlVWsy
NlF0ZEFCTHlBNTk1YlhTNmtKY1RPZ2tqZU94CjJkT3REWTRTZFZuR0pneDNtZjND
UXVjMWRqeCtVODZEb2J6bkgxWm4ycGRxQWI0amVqdXNFdnJtdkFlZmZMUFYKdlVT
ekhlK1hQSFRuRFBmV09JWTUrSS9VNnQ5RTY2T0dEeG9ONVVXdFRVY0g1ZmdqTStR
NDRUc21LQXhyK0dNbQoKLT4gc3NoLXJzYSBzS3JRWlEKc2FIQ20zUmRQYmhrRTlO
bjF0V2lKZXhFWXVNcVJmdk5jNXhMaDdkdGZWcGc4WVVBbGdGZGhTM0dLSFpkbWlP
SAo4aEl6U2xRTXhTTFUzTzhsWThtbngwZUl6VGQ1Z09IKzJWK29XNzNOL2ZMaEc4
WkdxUkI0cXVHaS9IT0NTS3M0Ci8vYjJDczQrUzdaSmxrU0ZsOFU4VUk0Nzh3eHh6
elYzOWJVaUxNbjM3cGRTdkd5Vlc3YWtHUjRiWDNoYU83WGYKNklxMkZCanBMZ0N5
b2ZvN3VwZkNLcUxTM0FVNU1TMmczSFR1Nm9HMHJQdlIyemxwNWNjVktIWlRnSks2
VWlwVAoyR3VQZmJCTGJSQ2xGemRWM1lUbmFhcFpmNE5ITmdjUFZZNTFaMW9ZcCtp
Q0V6ajFwbjEyTkZvT3JRZ3NCK011Cm9EOFcyQTNBT2pOVk5mZDU1cFQ3TFE5MnNK
eEVxWE1uMUNadkhMTVZVcUdBRythZmJnVG81ZG93YlE4K2JLWkYKbTgrTmVOSTEx
RWRqTXdRRDlmRjBrNUJpenZoenU0NnNzVmlxMmZKVERqTDdoZnlUZUNVaUxZNE91
RHNsK2NmawpacUVZdU9sdUJEWE83Z1FYYnhFQU5pMlZQVVhiV2hDbzBhM0YwOFZ5
Ny9EclZLK29XTUJ3K25ldDV2dTZpVlgxCkxsN3ZMRjVJekZ2aXl6UnFaSXpoYzUr
QWRQR0VjOUZPSnpnMk1uL0k4SW11VHdheW1xN25yR3VYbGNoNW9LTUkKUXNXVGFJ
c3dXY0hxaURhSEllN1o0Rm9nQnZlck53V0R5YTdDYWltTURSbHBGc0JFTUZkL1hz
MXRqTUNVNUs5MQoxNnFxN1AxenhYUFZnb0hMRDlnaWY3VmRCd0NnZk44UVNpb2Zk
RUZ4U1Y4Ci0+IHNzaC1lZDI1NTE5IGVSY0tCZyBSNml6R2pvQnV6WWV2WmFHaFo5
L0hTSFl5Y1h4S1lBNkFSZjNod29TV1dnCnhpVGNIVW44dnNrZlJyWWZxUGhsVGY1
TlMyR0tkcjUxTnI3NStaL2UwM1kKLS0tIFg3VEg5MGNCZnJBNmU0NXUza1d1aVlM
cmk0eXVab1RmTzhVTTZid1ZWclUKe1wXH51zJI3GYYwGVPhoXDcuV8vBZIcvGPQz
5pSAkRa/YrHMrfk=
-----END AGE ENCRYPTED FILE-----

RSA, ED25519 両方を含む複数の鍵で暗号化も問題なかったです.(紙幅をとるのでここには載せませんがそれぞれの鍵で復号も大丈夫でした.)

age 作者の鍵を入手して暗号化……失敗
$ wget https://github.com/FiloSottile.keys
$ age -a -R ./FiloSottile.keys data
age: warning: recipients file "./FiloSottile.keys": ignoring unsupported SSH key of type "ecdsa-sha2-nistp256" at line 1
age: error: failed to parse recipient file "./FiloSottile.keys": "./FiloSottile.keys": no recipients found
age: report unexpected or unhelpful errors at https://filippo.io/age/report
$ dd if=FiloSottile.keys bs=20 count=1 2>/dev/null; echo
ecdsa-sha2-nistp256

GitHub から age 作者の鍵をダウンロードして暗号化しようとしましたが,公開されている鍵形式が ed25519-sk のようで age に対応していない鍵だったので暗号化出来ませんでした.

GPG を公開していない人で GitHub などで SSH鍵を公開している人は結構居る気がするので SSH鍵で暗号化,復号化ができると便利そうです.
openssl でも出来るし導入された環境も多いと思いますがコマンドが煩雑,age だと利用が簡単なので普及すれば便利そうです.

環境
$ dpkg-query -W age openssh-client openssl
age     1.1.1-1+b3
openssh-client  1:9.2p1-2+deb12u2
openssl 3.0.11-1~deb12u2+rpt1
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 12 (bookworm)
Release:        12
Codename:       bookworm
$ arch
armv7l
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2
]]>
https://matoken.org/blog/2024/04/04/age-that-can-encrypt-and-decrypt-using-ssh-keys/feed/ 1
OpenSSH ED25519 の Vanity Adress を探してみる https://matoken.org/blog/2023/04/18/openssh-ed25519-vanity-adress/ https://matoken.org/blog/2023/04/18/openssh-ed25519-vanity-adress/#respond Mon, 17 Apr 2023 21:33:00 +0000 https://matoken.org/blog/?p=3891

以前何種類かのVanity Adress を掘ってみました.

ふとSSH鍵のVanity Adress はどうだろうと試してみました.

鍵はEd25519 .鍵ペアの公開鍵がいい感じだと良さそうな気がします.

OpenSSH ssh-keygen

まずはOpenSSH の ssh-keysign で作ってみます.大文字小文字いずれかの mat0 が見つかるまで作成しています.

$ umask 277; no=0; tmp=`mktemp -d -p ~/tmp/`; chmod 700 ${tmp}; while true;do no=$(($no + 1)); ssh-keygen -t ed25519 -f ${tmp}/${no} -N '' -C '' > /dev/null; grep -i -E m[a@]t[o0] ${tmp}/${no}.pub && echo ${tmp}/${no} && break; done
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOt6L8+9eF3T8o/M4BnDVZ5F7SVdPmat0hlM8s/8zV/r
/home/matoken/tmp/tmp.rGb5eSpEaJ/26016

26016鍵ペアを生成したところで186秒ほど,大体140.6keys/sec くらい.遅い感じ?vmstat やtop を見てもcpu はあまり使えていない感じです.
-a 1 (default:16) にすると160.8/keys/sec と少し早くなりましたが鍵を盗まれた場合の強度が下がると思うのでやめたほうが良さそうです.

ssh-keygen-ed25519-vanity

tool を探してみます.

clone&build
$ git clone https://github.com/ionathanch/ssh-keygen-ed25519-vanity
$ cd ssh-keygen-ed25519-vanity
$ make
run
$ ./vanity mato
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEHmibZNyKuT/GO9rloS8qmatoFOZ4N7fJcRSOPCwsky
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZWQyNTUxOQAAACBB5om2Tcirk/xjva5aEvKpmraBTmeDe3yXEUjjwsLJMgAAAIjwyswa8MrMGgAAAAtzc2gtZWQyNTUxOQAAACBB5om2Tcirk/xjva5aEvKpmraBTmeDe3yXEUjjwsLJMgA
AAEBro42f/ycDTNvMw3JHIGD5dzg+VVgshQw+RWIhN/I2WEHmibZNyKuT/GO9rloS8qmatoFOZ4N7fJcRSOPCwskyAAAAAAECAwQF
-----END OPENSSH PRIVATE KEY-----

shell でssh-keygen を回すより速そうです.更にREADME にはmoreutils のparallel を使って並列実行する方法も書かれていました.

$ time parallel -n 0 ./vanity vanity -- 1 2 3 4

以下はREADME にあった文字数によりどのくらい時間がかかるかの目安です.

Rough performance stats
Obviously since it’s brute force the times are probabilistic, but this gives you an idea of how feasible it would be to find your desired number of characters.

Substring Time (s)

a

0.002

ar

0.015

ars

0.501

arso

3.753

arson

abandon all hope ye who seek five sequential characters

大分速いような気がしますがアドレスの指定が固定なようで大文字小文字どっちでもとか代替記号でもいいなどといったことが出来なそうです.

vanity-keygen

また別のものも試してみます.

clone&build
$ go install github.com/pcarrier/vanity-keygen@latest
$ vanity-keygen -h
Usage of vanity-keygen:
  -cpuprofile string
        write cpu profile to file
  -threads int
        number of threads to run (default 4)
run
$ time vanity-keygen -threads `nproc` [mM][aA@][tT][oO0]
2023/04/05 08:30:06 Looking for a public key matching [mM][aA@][tT][oO0]
2023/04/05 08:30:06 Public key:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA2rzJZSoqwrVF/Pf2FzKgfL/eMATOI/V7bjdmqkGV5B
2023/04/05 08:30:06 Private key:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtz
c2gtZWQyNTUxOQAAACANq8yWUqKsK1Rfz39hcyoHy/3jAEziP1e243ZqpBleQQAA
AIiaywRCmssEQgAAAAtzc2gtZWQyNTUxOQAAACANq8yWUqKsK1Rfz39hcyoHy/3j
AEziP1e243ZqpBleQQAAAEDBsKpzquKe0/QTheaoVSChK8gF6d38u5mwrtqihfMY
6A2rzJZSoqwrVF/Pf2FzKgfL/eMATOI/V7bjdmqkGV5BAAAAAAECAwQF
-----END OPENSSH PRIVATE KEY-----

real    0m0.331s
user    0m0.652s
sys     0m0.048s

このツールはスレッド数も指定できるし,アドレスの指定も柔軟なので良さそうです.

$ vanity-keygen aaaaa
2023/04/05 08:30:12 Looking for a public key matching aaaaa
2023/04/05 08:30:13 Generated 71,000 keypairs (69,788 Hz)
2023/04/05 08:30:14 Generated 141,000 keypairs (70,310 Hz)
2023/04/05 08:30:15 Generated 212,000 keypairs (70,454 Hz)
2023/04/05 08:30:16 Generated 284,000 keypairs (70,792 Hz)
2023/04/05 08:30:17 Generated 356,000 keypairs (71,040 Hz)

探索中にどのくらいの鍵を生成したかも表示されます.

良さそうなのでTor のときのように少電力なSBCのRaspberry Pi 3 modelB でも試してみました.

Raspberry Pi OS armhf 向けにamd64 環境でクロスビルド
$ GOARCH=arm GOARM=7 go build .
$ file ./vanity-keygen
./vanity-keygen: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, Go BuildID=Z_Cr4XM48GAIHSA-MQng/2wFeSpgr5k0WPASNS4ho/3FEwAtva33LS2ByXLcjP/0WSk_fEc6xXCDZEo89yH, with debug_info, not stripped
Pi3Bで実行
$ ./vanity-keygen -threads 4 aaaa
2023/04/05 08:22:58 Looking for a public key matching aaaa
2023/04/05 08:22:59 Generated 0 keypairs (0 Hz)
2023/04/05 08:23:00 Generated 4,000 keypairs (1,991 Hz)
2023/04/05 08:23:01 Generated 4,000 keypairs (1,332 Hz)
2023/04/05 08:23:02 Generated 8,000 keypairs (1,990 Hz)
2023/04/05 08:23:03 Generated 8,000 keypairs (1,598 Hz)
^C
$ cat /proc/device-tree/model && echo
Raspberry Pi 3 Model B Rev 1.2

……大分遅くなりました.PCで実行したほうが良さそうです.

まとめ

気に入った鍵が出来たらパスフレーズを設定したり,

$ ssh-keygen -p -f ./key
Key has comment ''
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

コメントを書き換えたりしましょう.

$ ssh-keygen -c -f ./key
Enter passphrase:
Old comment:
New comment: vanity
Comment 'vanity' applied

Tor のVanity adoress なんかに比べるとあまり目立たないですが,hostkey やGitHub/Lab などで一般公開している鍵に使うのはありではと思います.

環境

$ cpu-info
Packages:
        0: Intel Core i5-7300U
Microarchitectures:
        2x Sky Lake
Cores:
        0: 2 processors (0-1), Intel Sky Lake
        1: 2 processors (2-3), Intel Sky Lake
Logical processors (System ID):
        0 (0): APIC ID 0x00000000
        1 (2): APIC ID 0x00000001
        2 (1): APIC ID 0x00000002
        3 (3): APIC ID 0x00000003
$ lsb_release -dr
No LSB modules are available.
Description:    Debian GNU/Linux 12 (bookworm)
Release:        12
$ arch
x86_64
]]>
https://matoken.org/blog/2023/04/18/openssh-ed25519-vanity-adress/feed/ 0
OpenSSHで長いホスト名のサーバー接続失敗(too long for Unix domain socket) https://matoken.org/blog/2022/03/12/server-connection-failure-with-long-hostname-in-openssh/ https://matoken.org/blog/2022/03/12/server-connection-failure-with-long-hostname-in-openssh/#respond Sat, 12 Mar 2022 14:46:51 +0000 http://matoken.org/blog/?p=3528

長いホスト名のサーバに接続しようとしたら認証成功後に怒られました.実際は62文字の長いホスト名でした.

unix_listener: path "/home/matoken/.ssh/tmp/ssh-${USER}@${長いホスト名}:22.r3NYV60KUEAXUuRZ" too long for Unix domain socket

hostnameが長くて, ControlPath で設定したファイルの作成時にファイルシステムの制限で失敗しているようです.

とりあえず ssh のオプションで -o ControlMaster=no をつけて実行すると繋がります.

~/.ssh/config の対象hostで ControlMaster no としてみたけど効かないようで同じエラーになりました.

Host TARGETHOST
  ControlMaster no
  ControlPath no

man 5 ssh_config を見ると ControlPath に使える変数で %C を指定することで %l%h%p%r のハッシュになるようです.

     ControlPath
             Specify the path to the control socket used for connection sharing as described in the ControlMaster section above or the string none to disable connection sharing.  Arguments to ControlPath may use the tilde
             syntax to refer to a user's home directory, the tokens described in the TOKENS section and environment variables as described in the ENVIRONMENT VARIABLES section.  It is recommended that any ControlPath used
             for opportunistic connection sharing include at least %h, %p, and %r (or alternatively %C) and be placed in a directory that is not writable by other users.  This ensures that shared connections are uniquely
             identified.
TOKENS
     Arguments to some keywords can make use of tokens, which are expanded at runtime:

           %%    A literal ‘%’.
           %C    Hash of %l%h%p%r.
           %d    Local user's home directory.
           %f    The fingerprint of the server's host key.
           %H    The known_hosts hostname or address that is being searched for.
           %h    The remote hostname.
           %I    A string describing the reason for a KnownHostsCommand execution: either ADDRESS when looking up a host by address (only when CheckHostIP is enabled), HOSTNAME when searching by hostname, or ORDER when
                 preparing the host key algorithm preference list to use for the destination host.
           %i    The local user ID.
           %K    The base64 encoded host key.
           %k    The host key alias if specified, otherwise the original remote hostname given on the command line.
           %L    The local hostname.
           %l    The local hostname, including the domain name.
           %n    The original remote hostname, as given on the command line.
           %p    The remote port.
           %r    The remote username.
           %T    The local tun(4) or tap(4) network interface assigned if tunnel forwarding was requested, or "NONE" otherwise.
           %t    The type of the server host key, e.g.  ssh-ed25519.
           %u    The local username.

     CertificateFile, ControlPath, IdentityAgent, IdentityFile, KnownHostsCommand, LocalForward, Match exec, RemoteCommand, RemoteForward, and UserKnownHostsFile accept the tokens %%, %C, %d, %h, %i, %k, %L, %l, %n, %p,
     %r, and %u.

     KnownHostsCommand additionally accepts the tokens %f, %H, %I, %K and %t.

     Hostname accepts the tokens %% and %h.

     LocalCommand accepts all tokens.

     ProxyCommand accepts the tokens %%, %h, %n, %p, and %r.

これを ~/.ssh/config に設定してみると( ControlPath ~/.ssh/tmp/%C )こんな感じの a1e724af86ad309c968737a2fb73a3f1c0298e05 40文字のハッシュのファイル名になってとりあえず解決しました.人間には優しくないけどそう見るものではないのでいいかな?

環境
$ dpkg-query -W openssh-client tor
openssh-client  1:8.9p1-3
tor     0.4.6.10-1
$ lsb_release -dr
Description:    Debian GNU/Linux bookworm/sid
Release:        unstable
$ arch
x86_64
]]>
https://matoken.org/blog/2022/03/12/server-connection-failure-with-long-hostname-in-openssh/feed/ 0
OpenSSHで使えるRSA鍵ペアをOpenSSLで生成する https://matoken.org/blog/2019/12/29/generate-an-rsa-key-pair-that-can-be-used-with-openssh-with-openssl/ https://matoken.org/blog/2019/12/29/generate-an-rsa-key-pair-that-can-be-used-with-openssh-with-openssl/#respond Sun, 29 Dec 2019 09:03:39 +0000 http://matoken.org/blog/?p=2699

OpenSSH 7.1/7.1p1でRSA鍵長は最低1024bitになりました.

 * Refusing all RSA keys smaller than 1024 bits (the current minimum
   is 768 bits)

1024bitより短い鍵長の鍵を作ろうとすると怒られます.

$ ssh-keygen -t rsa -b 768
Invalid RSA key length: minimum is 1024 bits

以下のMLで古い機器が1024bitに対応していない場合の相談でOpenSSLでOpenSSHで利用できるRSA鍵ペアが作れるのを知りました.

You can use openssl to generate a shorter key:

	$ openssl genprsa -out key.pem 768
	$ ssh-keygen -y -f key.pem > key.pub # optional to get public key

This works with a 768-bit RSA key (client: OpenSSH_7.2p2, OpenSSL
1.0.2g; server: OpenSSH_7.2p2, OpenSSL 1.0.2g) but not a 256-bit RSA
key: I can generate the shorter key but the server requires a minimum of
768-bits.

使うことがあるかわからないけど手元の環境で試してみました.

opensslでRSA 768の秘密鍵の作成
$ openssl genrsa -out id_rsa768 768
Generating RSA private key, 768 bit long modulus (2 primes)
........+++++++
................................+++++++
e is 65537 (0x010001)
パスフレーズありのRSA 768の秘密鍵の作成
$ openssl genrsa -out id_rsa768 -aes256 768
Generating RSA private key, 768 bit long modulus (2 primes)
..+++++++
..........+++++++
e is 65537 (0x010001)
Enter pass phrase for id_rsa768:
Verifying - Enter pass phrase for id_rsa768:

OpenSSLから書き出された鍵ファイルのパーミッションはumaskに関係なく(0000でも)600になっています :)

秘密鍵の確認
$ openssl rsa -text < id_rsa768

秘密鍵が出来たので続いてペアとなる公開鍵を作ります.
MLの例と同じように ssh-keygen を使うと鍵の長さで怒られます.

$ ssh-keygen -y -f id_rsa768 > id_rsa768.pub
Load key "id_rsa768": Invalid key length

公開鍵もOpenSSLで作ります.

OpenSSL公開鍵を作る
$ openssl rsa -pubout < id_rsa768 > id_rsa768.pub
writing RSA key
公開鍵の確認
$ openssl rsa -text -pubin < id_rsa768.pub
出来上がった鍵ペアでログインを試みると鍵長のせいで認証に失敗
$ ssh -v -i ~/.ssh/id_rsa768 localhost
   :
debug1: Trying private key: /home/matoken/.ssh/id_rsa768
Load key "/home/matoken/.ssh/id_rsa768": Invalid key length

てことで使いみちがなさそうですがメモしておきます.
#今ならed25519使いますしね…….

ちなみに1024bitより長い鍵なら普通に使えてssh-keygenでコメントを書き換えたりパスフレーズを書き換えたりでしました.

RSA 4096の鍵
$ openssl genrsa -out id_rsa4096 -aes256 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
................++++
.....................................................................................................++++
e is 65537 (0x010001)
Enter pass phrase for id_rsa4096:
Verifying - Enter pass phrase for id_rsa4096:
$ ssh-keygen -c -C 'OpenSSL generate key' -f ./id_rsa4096
Enter passphrase:
No existing comment
Comment 'OpenSSL generated key' applied
$ ssh-keygen -p -f ./id_rsa4096
Enter old passphrase:
Key has comment 'OpenSSL generated key'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
環境
$ dpkg-query -W openssl openssh-client openssh-server
openssh-client  1:8.1p1-2
openssh-server  1:8.1p1-2
openssl 1.1.1d-2
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64
]]>
https://matoken.org/blog/2019/12/29/generate-an-rsa-key-pair-that-can-be-used-with-openssh-with-openssl/feed/ 0
Ubuntu Server インストーラの Github, Launchpad からの ssh公開鍵インポート機能 https://matoken.org/blog/2019/03/31/ssh-public-key-import-function-from-ubuntu-server-installer-github-launchpad/ https://matoken.org/blog/2019/03/31/ssh-public-key-import-function-from-ubuntu-server-installer-github-launchpad/#comments Sun, 31 Mar 2019 03:36:06 +0000 http://matoken.org/blog/?p=2354

github.com/settings/keys からSSH Keyとして突っ込んどくと便利だし、今のUbuntu Serverはセットアップでそれを使う項目すらあるので

なるほど便利そう
試してみようと Ubuntu Server 18.04.2 LTS
(ubuntu-18.04.2-live-server-amd64.iso) のインストーラで試してみました.

OpenSSH を導入するようにすると,SSH鍵をインポートするオプションで Github / Launchpad が選べます.
Screenshot ubuntu18 04 2019 03 30 13 02 56

こんな感じでインポートされました.
Screenshot ubuntu18 04 2019 03 30 13 05 37

インストールが終了して ssh login するとインポートされた鍵で login 出来ました.

インポートされた公開鍵を確認するとコメント部分が少し書き換わっています.

$ cat ~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgwY9aZPxN/YoBBzd7TOcCk7EuGO0E9PuUjCHPtTuHP matoken@github/16598604 # ssh-import-id gh:matoken
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEoKnbjj7cVafcAJbYHqUEua1x/81uzoK0LnjgqmR6H8 matoken@github/33364582 # ssh-import-id gh:matoken

sshd_config を見ると編集ではなく末尾に追記してるのでちょっと雑い感.

$ grep PasswordAuthentication /etc/ssh/sshd_config
#PasswordAuthentication yes
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication, then enable this but set PasswordAuthentication
PasswordAuthentication no
$ tail -1 /etc/ssh/sshd_config
PasswordAuthentication no

ちなみに,Github から鍵を入手するのはこんな感じで行けるようです.
(<USERNAME>部分を該当ユーザ名に修正)

Launchpad はこんな感じ.

ちなみにLaunchpad は未だED25519形式には未対応なようです.
20190330 13 03 12 27418

Bitbucket の鍵も同様に https://api.bitbucket.org/2.0/users/<USERNAME>/ssh-keys で入手できそうと思ったのですが,未認証では駄目みたいです.

$ curl -s https://api.bitbucket.org/2.0/users/matoken/ssh-keys|jq
{
  "type": "error",
  "error": {
    "message": "This API is only accessible with the following authentication types: session, password, apppassword"
  }
}
環境
$ lsb_release -d
Description:	Ubuntu 18.04.2 LTS
$ uname -m
x86_64

]]>
https://matoken.org/blog/2019/03/31/ssh-public-key-import-function-from-ubuntu-server-installer-github-launchpad/feed/ 1
Endlessh を使って ssh 接続をとてもゆっくりと処理して攻撃者に嫌がらせをする https://matoken.org/blog/2019/03/26/use-endlessh-to-handle-ssh-connections-very-slowly-and-harass-attackers/ https://matoken.org/blog/2019/03/26/use-endlessh-to-handle-ssh-connections-very-slowly-and-harass-attackers/#comments Mon, 25 Mar 2019 15:19:39 +0000 http://matoken.org/blog/?p=2340

ssh は攻撃が多いです.公開鍵認証にしておくと大分侵入に強くなりますがインターネットに直接繋がっているサーバでは攻撃はとても多いです.

Endlessh はsshd の代わりに起動してバージョン情報を送る前のデータにほぼランダムな文字列をゆっくりと配信し続けて攻撃者の足止めをするプログラムのようです.
本当の sshd は別ポートで起動してそっちを使う感じでしょうか.22番を無くして port knocking や sslh を使うなどのほうがいいかもですが面白そうです.

ということで手元で少し試してみました.

導入とビルド
$ git clone https://github.com/skeeto/endlessh
$ cd endlessh
$ git log |head -1
commit 548a7b1521b2912e7e133d0d9df50e0e514f1f2c
$ make
port 22222 で起動
$ ./endlessh -v -p22222 &
[1] 22698
2019-03-24T04:56:10.338Z Port 22222
2019-03-24T04:56:10.338Z Delay 10000
2019-03-24T04:56:10.338Z MaxLineLength 32
2019-03-24T04:56:10.338Z MaxClients 4096
ssh 接続してみると700分ほど捕まえていた
$ time ssh localhost -p 22222
2019-03-24T04:56:19.510Z ACCEPT host=::1 port=59402 fd=4 n=1/4096
ssh_exchange_identification: No banner received

real    700m30.650s
user    0m0.040s
sys     0m0.240s
2019-03-24T16:37:00.162Z CLOSE host=::1 port=59402 fd=4 time=42040.652 bytes=73944
終了
$ kill %1
[1]+  Done                    ./endlessh -v -p22222

数回試しましたが,標準オプションでは700分前後捕まりました.単にありもののscriptを動かすレベルの攻撃者であればツールが対応するまでは妨害になりそうです.

環境
$ git log |head -1
commit 548a7b1521b2912e7e133d0d9df50e0e514f1f2c
$ dpkg-query -W openssh-client
openssh-client  1:7.9p1-9
$ lsb_release -dr
Description:    Debian GNU/Linux buster/sid
Release:        unstable
$ uname -m
x86_64

]]>
https://matoken.org/blog/2019/03/26/use-endlessh-to-handle-ssh-connections-very-slowly-and-harass-attackers/feed/ 2
ssh-import-idコマンドを試す https://matoken.org/blog/2016/04/10/try-ssh-import-id-command/ https://matoken.org/blog/2016/04/10/try-ssh-import-id-command/#respond Sun, 10 Apr 2016 12:47:24 +0000 http://matoken.org/blog/?p=1334

最近知ったLaunchPad/GitHUBの鍵を読み込んでインポートするコマンドを知りました.昔同名のコマンドか何かがOpenSSHにもあった気がするけどそれは今なくて別物みたい?

動きはこんな感じ

  • lp:USERID でLaunchPadの鍵をインポート

  • gh:USERID でGitHUBの鍵をインポート

  • USERID でLaunchPadの鍵をインポート

  • USERID は複数指定可能

  • 鍵は ~/.ssh/authorized_keys に書き込まれる

  • -o で書き出すファイルが指定可能`-`だとSTDOUT

  • -r で鍵削除

$ apt show ssh-import-id
Package: ssh-import-id
Version: 3.21-1
Priority: extra
Section: misc
Maintainer: Dustin Kirkland <kirkland@ubuntu.com>
Installed-Size: 98.3 kB
Depends: ca-certificates, openssh-client, python-requests (>= 1.1.0), wget, python (>= 2.7), python (<< 2.8)
Recommends: openssh-server
Homepage: http://launchpad.net/ssh-import-id
Download-Size: 17.7 kB
APT-Manual-Installed: yes
APT-Sources: http://dennou-q.gfd-dennou.org/debian stretch/main amd64 Packages
Description: securely retrieve an SSH public key and install it locally
 This utility will securely contact a public keyserver (Launchpad.net by
 default, but Github.com is also supported), retrieve one or more user's
 public keys, and append these to the current user's ~/.ssh/authorized_keys
 file.
$ ssh-import-id -h
usage: ssh-import-id [-h] [-o FILE] [-r] USERID [USERID ...]

Authorize SSH public keys from trusted online identities.

positional arguments:
  USERID                User IDs to import

optional arguments:
  -h, --help            show this help message and exit
  -o FILE, --output FILE
                        Write output to file (default ~/.ssh/authorized_keys)
  -r, --remove          Remove a key from authorized keys file

LaunchPadの matoken の鍵をインポート

$ ssh-import-id -o - lp:matoken
2016-04-10 19:07:35,698 INFO Authorized key ['4096', 'SHA256:4MQHGaIDjLbnM3kU5rgFSq6cDou3LUYSjSTumL+eFKw', 'mk@rsa4k','(RSA)']
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDSnDzGBIHoX20WWjPrqn4JoWIHChE5JNqlnPxL0cSCj8wxQ9Y7AEgZfd9yq2ipXsBoVCi6D6ymk1/fQmEe8vW4U10ajb9VnA7ypy4Rjp1RV2RNyIS7jsJdYCMhGlXW8OlyKcxPbh6z/L/2ZuHbw32shJzMAs58JNNwxERQJDfPiJLq1WWrjOxAPCxtuTWddXfaZFgdxZQIXxW1TpTUqeu/OowQ8v1Mqt27agB2RZNPUOwe8A94cwJDbJNNpS7TIRgyKeApD45TKYc0w7ehbC42nURM//4PguHXBC3Arp1P3/Z4/DGdnLOrXU9fUWe0g+ucyT4aL6pI0on8mOivv2CcnePvTDHIwRIchibp0lPtBLOS4pmQFHf5U5N2SZF+B0dI/3Q4Sd9BC5VmF9owLi1bXRZw17Hqpgj2tOnI3HYTOvbssLt0DQcQBOE4puQ9epc+Lioqw6+SvCtiQl1pGl3b3reQh61q4lhc+FRtYvsUIOrjYHJ+QG0sGTVuC/RUWTbCterWX3ogENAYNWGv/83Z9sMCQTr894unhru1LHCmnGouxhtZ0lbWt/OVdsNcONu9RK/GlccDnuOj8THOIVghHJP9/9I6lTS4rX4aXAMaXns1hi5sO5WOGKhUNbUbW6vHTJCdoXjuajL0PJmr2Fa4H8qH0GQzFuhCu82txkjWnQ== mk@rsa4k# ssh-import-id lp:matoken
2016-04-10 19:07:35,698 INFO [1] SSH keys [Authorized]

これもLaunchPadの matoken の鍵をインポート

$ ssh-import-id -o - matoken
2016-04-10 19:08:26,513 INFO Authorized key ['4096', 'SHA256:4MQHGaIDjLbnM3kU5rgFSq6cDou3LUYSjSTumL+eFKw', 'mk@rsa4k','(RSA)']
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDSnDzGBIHoX20WWjPrqn4JoWIHChE5JNqlnPxL0cSCj8wxQ9Y7AEgZfd9yq2ipXsBoVCi6D6ymk1/fQmEe8vW4U10ajb9VnA7ypy4Rjp1RV2RNyIS7jsJdYCMhGlXW8OlyKcxPbh6z/L/2ZuHbw32shJzMAs58JNNwxERQJDfPiJLq1WWrjOxAPCxtuTWddXfaZFgdxZQIXxW1TpTUqeu/OowQ8v1Mqt27agB2RZNPUOwe8A94cwJDbJNNpS7TIRgyKeApD45TKYc0w7ehbC42nURM//4PguHXBC3Arp1P3/Z4/DGdnLOrXU9fUWe0g+ucyT4aL6pI0on8mOivv2CcnePvTDHIwRIchibp0lPtBLOS4pmQFHf5U5N2SZF+B0dI/3Q4Sd9BC5VmF9owLi1bXRZw17Hqpgj2tOnI3HYTOvbssLt0DQcQBOE4puQ9epc+Lioqw6+SvCtiQl1pGl3b3reQh61q4lhc+FRtYvsUIOrjYHJ+QG0sGTVuC/RUWTbCterWX3ogENAYNWGv/83Z9sMCQTr894unhru1LHCmnGouxhtZ0lbWt/OVdsNcONu9RK/GlccDnuOj8THOIVghHJP9/9I6lTS4rX4aXAMaXns1hi5sO5WOGKhUNbUbW6vHTJCdoXjuajL0PJmr2Fa4H8qH0GQzFuhCu82txkjWnQ== mk@rsa4k# ssh-import-id lp:matoken
2016-04-10 19:08:26,513 INFO [1] SSH keys [Authorized]

GitHUBの matoken の鍵をインポート.複数あると全部インポートされるよう.

$ ssh-import-id -o - gh:matoken
2016-04-10 19:07:24,965 INFO Authorized key ['256', 'SHA256:B+hArXsApncIXlNlHoHnYxEV3Wfl9WdQLp5TwuTjqjY', 'matoken@github/8506592','(ECDSA)']
2016-04-10 19:07:24,972 INFO Authorized key ['256', 'SHA256:Jv7NHotumFU7z1fCRkJnfKwR0EtAweHWMIrduS4dXeM', 'matoken@github/16598604','(ED25519)']
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA0otYIHWIP6/Zt1t3Zj1FBPEiq6dcOUItrxlfwfyvlVAqRRDWqdZQEA5jdYNWU/vSaxZZ6STCKfiEwORdQvqa8= matoken@github/8506592# ssh-import-id gh:matoken
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgwY9aZPxN/YoBBzd7TOcCk7EuGO0E9PuUjCHPtTuHP matoken@github/16598604# ssh-import-id gh:matoken
2016-04-10 19:07:24,972 INFO [2] SSH keys [Authorized]

LaunchPadとGitHUBを同時にインポート.

$ ssh-import-id -o ~/tmp/authorized_keys gh:matoken lp:matoken
2016-04-10 19:55:51,043 INFO Authorized key ['256', 'SHA256:B+hArXsApncIXlNlHoHnYxEV3Wfl9WdQLp5TwuTjqjY', 'matoken@github/8506592', '(ECDSA)']
2016-04-10 19:55:51,058 INFO Authorized key ['256', 'SHA256:Jv7NHotumFU7z1fCRkJnfKwR0EtAweHWMIrduS4dXeM', 'matoken@github/16598604', '(ED25519)']
2016-04-10 19:55:53,031 INFO Authorized key ['4096', 'SHA256:4MQHGaIDjLbnM3kU5rgFSq6cDou3LUYSjSTumL+eFKw', 'mk@rsa4k', '(RSA)']
2016-04-10 19:55:53,034 INFO [3] SSH keys [Authorized]
$ cat ~/tmp/authorized_keys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA0otYIHWIP6/Zt1t3Zj1FBPEiq6dcOUItrxlfwfyvlVAqRRDWqdZQEA5jdYNWU/vSaxZZ6STCKfiEwORdQvqa8= matoken@github/8506592 # ssh-import-id gh:matoken
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgwY9aZPxN/YoBBzd7TOcCk7EuGO0E9PuUjCHPtTuHP matoken@github/16598604 # ssh-import-id gh:matoken
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDSnDzGBIHoX20WWjPrqn4JoWIHChE5JNqlnPxL0cSCj8wxQ9Y7AEgZfd9yq2ipXsBoVCi6D6ymk1/fQmEe8vW4U10ajb9VnA7ypy4Rjp1RV2RNyIS7jsJdYCMhGlXW8OlyKcxPbh6z/L/2ZuHbw32shJzMAs58JNNwxERQJDfPiJLq1WWrjOxAPCxtuTWddXfaZFgdxZQIXxW1TpTUqeu/OowQ8v1Mqt27agB2RZNPUOwe8A94cwJDbJNNpS7TIRgyKeApD45TKYc0w7ehbC42nURM//4PguHXBC3Arp1P3/Z4/DGdnLOrXU9fUWe0g+ucyT4aL6pI0on8mOivv2CcnePvTDHIwRIchibp0lPtBLOS4pmQFHf5U5N2SZF+B0dI/3Q4Sd9BC5VmF9owLi1bXRZw17Hqpgj2tOnI3HYTOvbssLt0DQcQBOE4puQ9epc+Lioqw6+SvCtiQl1pGl3b3reQh61q4lhc+FRtYvsUIOrjYHJ+QG0sGTVuC/RUWTbCterWX3ogENAYNWGv/83Z9sMCQTr894unhru1LHCmnGouxhtZ0lbWt/OVdsNcONu9RK/GlccDnuOj8THOIVghHJP9/9I6lTS4rX4aXAMaXns1hi5sO5WOGKhUNbUbW6vHTJCdoXjuajL0PJmr2Fa4H8qH0GQzFuhCu82txkjWnQ== mk@rsa4k # ssh-import-id lp:matoken

-r で鍵の削除.

$ ssh-import-id -r -o ~/tmp/authorized_keys gh:matoken
2016-04-10 19:56:08,827 INFO Removed labeled key ['256', 'SHA256:B+hArXsApncIXlNlHoHnYxEV3Wfl9WdQLp5TwuTjqjY', 'matoken@github/8506592', '(ECDSA)']
2016-04-10 19:56:08,837 INFO Removed labeled key ['256', 'SHA256:Jv7NHotumFU7z1fCRkJnfKwR0EtAweHWMIrduS4dXeM', 'matoken@github/16598604', '(ED25519)']
2016-04-10 19:56:08,837 INFO [2] SSH keys [Removed]
$ cat ~/tmp/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDSnDzGBIHoX20WWjPrqn4JoWIHChE5JNqlnPxL0cSCj8wxQ9Y7AEgZfd9yq2ipXsBoVCi6D6ymk1/fQmEe8vW4U10ajb9VnA7ypy4Rjp1RV2RNyIS7jsJdYCMhGlXW8OlyKcxPbh6z/L/2ZuHbw32shJzMAs58JNNwxERQJDfPiJLq1WWrjOxAPCxtuTWddXfaZFgdxZQIXxW1TpTUqeu/OowQ8v1Mqt27agB2RZNPUOwe8A94cwJDbJNNpS7TIRgyKeApD45TKYc0w7ehbC42nURM//4PguHXBC3Arp1P3/Z4/DGdnLOrXU9fUWe0g+ucyT4aL6pI0on8mOivv2CcnePvTDHIwRIchibp0lPtBLOS4pmQFHf5U5N2SZF+B0dI/3Q4Sd9BC5VmF9owLi1bXRZw17Hqpgj2tOnI3HYTOvbssLt0DQcQBOE4puQ9epc+Lioqw6+SvCtiQl1pGl3b3reQh61q4lhc+FRtYvsUIOrjYHJ+QG0sGTVuC/RUWTbCterWX3ogENAYNWGv/83Z9sMCQTr894unhru1LHCmnGouxhtZ0lbWt/OVdsNcONu9RK/GlccDnuOj8THOIVghHJP9/9I6lTS4rX4aXAMaXns1hi5sO5WOGKhUNbUbW6vHTJCdoXjuajL0PJmr2Fa4H8qH0GQzFuhCu82txkjWnQ== mk@rsa4k # ssh-import-id lp:matoken

$ ssh-import-id -r -o ~/tmp/authorized_keys matoken
2016-04-10 19:57:54,852 INFO Removed labeled key ['4096', 'SHA256:4MQHGaIDjLbnM3kU5rgFSq6cDou3LUYSjSTumL+eFKw', 'mk@rsa4k', '(RSA)']
2016-04-10 19:57:54,853 INFO [1] SSH keys [Removed]
$ cat ~/tmp/authorized_keys

新規ファイルでもパーミッションは適切に設定されている.

$ ls -l ~/tmp/authorized_keys
-rw------- 1 mk mk 0  4月 10 19:57 /home/mk/tmp/authorized_keys

ちなみに
/etc/ssh/ssh_import_id
を書き換えると任意のサーバを使うことも可能.

-       "URL": "https://launchpad.net/~%s/+sshkeys"
+       "URL": "https://example.org/~%s/+sshkeys"

これだと

$ ssh-import-id matoken

https://example.org/~matoken/+sshkeys が取り込まれる.
lpは上書きされちゃう感じ?

]]>
https://matoken.org/blog/2016/04/10/try-ssh-import-id-command/feed/ 0
OpenSSH 7.2で入ったssh-keygenの新機能を試す https://matoken.org/blog/2016/03/01/try-the-ssh-keygen-of-new-openssh-7-2/ https://matoken.org/blog/2016/03/01/try-the-ssh-keygen-of-new-openssh-7-2/#respond Mon, 29 Feb 2016 22:01:53 +0000 http://matoken.org/blog/?p=1260

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]---+



]]>
https://matoken.org/blog/2016/03/01/try-the-ssh-keygen-of-new-openssh-7-2/feed/ 0
OpenSSH 7.2のsshdに入ったauthorized_keysの新オプションを試す https://matoken.org/blog/2016/03/01/try-the-new-option-authorized_keys-the-sshd-of-openssh-7-2/ https://matoken.org/blog/2016/03/01/try-the-new-option-authorized_keys-the-sshd-of-openssh-7-2/#respond Mon, 29 Feb 2016 17:18:56 +0000 http://matoken.org/blog/?p=1257

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:

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

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


]]>
https://matoken.org/blog/2016/03/01/try-the-new-option-authorized_keys-the-sshd-of-openssh-7-2/feed/ 0
OpenSSHのHostKeyにED25519を追加 https://matoken.org/blog/2016/02/28/add-ed25519-to-openssh-of-hostkey/ https://matoken.org/blog/2016/02/28/add-ed25519-to-openssh-of-hostkey/#respond Sat, 27 Feb 2016 16:07:12 +0000 http://matoken.org/blog/?p=1234

ふとある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で入りました.

]]>
https://matoken.org/blog/2016/02/28/add-ed25519-to-openssh-of-hostkey/feed/ 0
OpenSSH 6.8/6.8p1 で鍵指紋のアルゴリズムの規定値が変わったので試す https://matoken.org/blog/2015/03/29/openssh_6-8_6-8p1-fingerprint_algorithm/ https://matoken.org/blog/2015/03/29/openssh_6-8_6-8p1-fingerprint_algorithm/#respond Sun, 29 Mar 2015 05:24:46 +0000 http://matoken.org/blog/?p=786

openssh

OpenSSH 6.8/6.8p1 のリリースノートを眺めていて気になる点が.
http://www.openssh.com/txt/release-6.8

* Add FingerprintHash option to ssh(1) and sshd(8), and equivalent
   command-line flags to the other tools to control algorithm used
   for key fingerprints. The default changes from MD5 to SHA256 and
   format from hex to base64.
 Fingerprints now have the hash algorithm prepended. An example of
   the new format: SHA256:mVPwvezndPv/ARoIadVY98vAC0g+P/5633yTC4d/wXE
   Please note that visual host keys will also be different.

鍵指紋の規定アルゴリズムがMD5 からSHA256 に変わり,表示形式もhex からbase64 になった,visual host key も変わる.ということで確認してみました.

従来のコマンドでの鍵指紋表示.MD5/hex が使われる

% ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key
256 e8:d0:53:e7:34:59:e9:77:3a:e7:8d:8a:a9:f6:91:84 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
+---[ECDSA 256]---+
|            ..   |
|           o.    |
|        . =.     |
|     . o = .. . .|
|    . + E o  . o |
|     o . . .  o .|
|      .   o    =.|
|        .  +  . o|
|       ..o+ ..   |
+-----------------+

OpenSSH 6.8/6.8p1 のコマンドでの鍵指紋表示.SHA256/base64が使われて鍵指紋の頭にSHA256が付いたりvisual host key の見た目も変わる.

% /home/mk/usr/local/openssh-6.8p1/bin/ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key
256 SHA256:pDZReijOXeDXAE0IgYb5E+DHgbyvClEllKCs499RI54 root@x220(ECDSA)
+---[ECDSA 256]---+
|+*+++oo=+        |
|*o*o...=.o       |
|.=o+. = = .      |
|.o+o o B         |
|+ ..o.=oS        |
|.o ...+..        |
|...  E           |
|... . .          |
|o  . .           |
+----[SHA256]-----+

しかし,-E option が提供されるようになってアルゴリズムを指定できるのでこれでMD5/hex で鍵指紋の確認が可能.
※ssh-keygen —help より

   ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]

※man より

 -E fingerprint_hash
         Specifies the hash algorithm used when displaying key fingerprints.  Valid options are: “md5” and “sha256”.  The default is “sha256”.

OpenSSH 6.8/6.8p1 のコマンドでMD5 を指定.MD5/hex で鍵指紋が表示される.ただ,アルゴリズムのMD5 が鍵指紋の頭につくし後ろにcomment も付くのでdiff とかを使うと差異が出る.visual host key も下に[MD5]がつくので同様.

% /home/mk/usr/local/openssh-6.8p1/bin/ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key
256 MD5:e8:d0:53:e7:34:59:e9:77:3a:e7:8d:8a:a9:f6:91:84 root@x220(ECDSA)
+---[ECDSA 256]---+
|            ..   |
|           o.    |
|        . =.     |
|     . o = .. . .|
|    . + E o  . o |
|     o . . .  o .|
|      .   o    =.|
|        .  +  . o|
|       ..o+ ..   |
+------[MD5]------+
% ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key

てことで暫くはMD5/SHA256の2種類の鍵指紋を提供したほうが良さそうですね.

]]>
https://matoken.org/blog/2015/03/29/openssh_6-8_6-8p1-fingerprint_algorithm/feed/ 0