ssh2 ログイン

2020/06/21 18:06 Macro::macro サンプル

ssh2 ログイン

ログインを自動化するマクロは ログイン自動化 にまとめてありますので、そちらを参照してください。

また、解説も付けたものもあります。
このページでは、目的や仕様別にいろいろ作ってみたものを配置します。

サンプルマクロの仕様

公開鍵を登録した Linux サーバに対し、自身がもつ秘密鍵でアクセスします。
鍵は、特に言及しない限りパスフレーズを指定しているものとします。

本手順書での格納先

本手順で利用する各ファイルの格納先です。
環境に合わせて読み替えてください。
利用ファイル一覧
対象ファイル格納先備考
公開鍵"~/.ssh/authorized_keys"アクセス前に登録しておきます。
秘密鍵"C:\Users\Windows\Downloads\key\id_rsa"

マクロサンプル

基本形

パスフレーズは保存せず、毎回入力する形式のマクロです。
hostname = 'example.jp'
username = 'username'
keyfile  = "C:\Users\Windows\Downloads\key\id_rsa"

passwordbox 'Enter password' 'Login'

sprintf2 msg '%s /ssh2 /auth=publickey /user=%s /passwd="%s" /keyfile=%s' hostname username inputstr keyfile

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

サーバ側の待ち受けポート指定時

ssh の待ち受けポートを変更した場合、アクセス時にも適切に指定する必要があります。
hostname = 'example.jp'
portnumb = 22
username = 'username'
keyfile  = "C:\Users\Windows\Downloads\key\id_rsa"

passwordbox 'Enter password' 'Login'

sprintf2 msg '%s:%d /ssh2 /auth=publickey /user=%s /passwd="%s" /keyfile=%s' hostname portnumb username inputstr keyfile

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

設定ファイル (.ini ファイル) を指定するもの

.ttl ファイルと同じ場所に、hostname と同じ名前で .ini ファイルを格納している場合。
hostname = 'example.jp'
username = 'username'
tcpport  = '22'

sprintf2 ifile "%s.INI" hostname

getdir mdir
makepath inipath mdir ifile

sprintf2 msg "Enter password for user %s" username
passwordbox msg 'Get password'
password = inputstr

sprintf2 msg "%s:%s /ssh /auth=password /user=%s /passwd=%s /F=%s" hostname tcpport username password inipath

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

基本形(パスフレーズなし)

AWS で何も考えずに鍵ペアを作った場合、パスフレーズが設定されていないようです。
外部から EC2 インスタンスにログインする場合、極端にシンプルです。
hostname = 'example.jp'
username = 'username'
keyfile  = "C:\Users\Windows\Downloads\key\id_rsa"

sprintf2 msg "%s /ssh2 /auth=publickey /user=%s /keyfile=%s" hostname username keyfile

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

アクセス先ホストをリスト選択するもの

0~4 の 5 つ分、指定する場合です。
strdim axSSH 5
axSSH[0] = '192.168.0.10'
axSSH[1] = '192.168.0.11'
axSSH[2] = '192.168.0.12'
axSSH[3] = '192.168.0.13'
axSSH[4] = '192.168.0.14'

portnumb = 22
username = 'username'
keyfile  = "C:\Users\Windows\Downloads\key\id_rsa"

;; アクセス先選択
sprintf2 msg   "アクセス先を選択してください。"
sprintf2 title "種別選択"

listbox msg title axSSH
hostname = axSSH[result]

passwordbox 'Enter password' 'Login'

sprintf2 msg '%s:%d /ssh2 /auth=publickey /user=%s /passwd="%s" /keyfile=%s' hostname portnumb username inputstr keyfile

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

アクセス先ホストをリスト選択するもの(パスフレーズなし)

パスフレーズを指定しない条件で、0~4 の 5 つ指定する場合です。
strdim axSSH 5
axSSH[0] = '192.168.0.10'
axSSH[1] = '192.168.0.11'
axSSH[2] = '192.168.0.12'
axSSH[3] = '192.168.0.13'
axSSH[4] = '192.168.0.14'

portnumb = 22
username = 'username'
keyfile  = "C:\Users\Windows\Downloads\key\id_rsa"

;; アクセス先選択
sprintf2 msg   "アクセス先を選択してください。"
sprintf2 title "種別選択"

listbox msg title axSSH
hostname = axSSH[result]

sprintf2 msg "%s:%d /ssh2 /auth=publickey /user=%s /keyfile=%s" hostname portnumb username keyfile

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

ポート番号を選択するもの

指定の対象ホストに対し、指定ユーザでポートだけ指定する条件で、0~4 の 5 つ指定する場合です。
hostname = '192.168.0.10'
username = 'username'

strdim axPORT 5
axPORT[0] = '22'
axPORT[1] = '23'
axPORT[2] = '1022'
axPORT[3] = '80'
axPORT[4] = '8080'

;; アクセス先ポート選択
sprintf2 msg   "アクセス先ポートを選択してください。"
sprintf2 title "%s: ポート選択" hostname

listbox msg title axPORT
portnumb = axPORT[result]

passwordbox 'Enter password' 'Login'
Password = inputstr

sprintf2 msg '%s:%s /ssh2 /auth=password /user=%s /passwd="%s"' hostname portnumb username Password

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

基本形(パスワードを保存するもの)

基本形に、パスワード保存機能を付与したものです。

パスワードを、マクロファイルのカレントディレクトリに 'password.dat' という名前で保存します。
キーとなるパスワード名の構成は、ユーザ名@ホスト名にしてあります。

パスワード自体は暗号化されます。
hostname = 'example.jp'
username = 'username'
keyfile  = "C:\Users\Windows\Downloads\key\id_rsa"

sprintf2 pPasswdName "%s@%s" username hostname
getpassword 'password.dat' pPasswdName Password

sprintf2 msg '%s /ssh2 /auth=publickey /user=%s /passwd="%s" /keyfile=%s' hostname username Password keyfile

; 念のため、パスフレーズを表示させない処置
connect '/DS'

; 接続処理
connect msg

パスワードを削除するもの

ユーザ名@ホスト名という構成の名前で登録したパスワードを削除するものです。
定期的にパスワードを変更する運用の場合に必要ですね。

一応、パスワードファイルを変数に入れるように変更しています。
hostname = 'example.jp'
username = 'username'
pPasswdFile = 'password.dat'

sprintf2 pPasswdName "%s@%s" username hostname
delpassword pPasswdFile pPasswdName