SIer業界の作業手順書でよくあるのが
- teratermを起動する
- 宛先、パスワード入力
- ログイン
みたいに画面での操作手順を記載しているパターンが多いと思います。
しかし何年も業界にいると画面ポチポチも面倒になってきます。
ログインmacroを作って自動化している方もたくさんいると思いますが、
macroのメンテナンスや他の人に共有するのって意外と手間ですよね。
ターミナルから一発ログインできないかなと思い調べてみると、
やはり同じこと考える人がいて情報が存在するんですよね。
というわけで一発ログインコマンドを残しておきます。
puttyや他のソフトを使う方もいると思いますが、私の環境はteratermなので、その辺はご了承ください。
環境
私の現場は操作PCは全てWindowsなのでWindows機での操作を前提に書きます。
自宅のWindowsで試してます。
PS C:\Users\masashi\python\nwdiag> Get-WmiObject Win32_OperatingSystem SystemDirectory : C:\WINDOWS\system32 Organization : BuildNumber : 17763 RegisteredUser : user SerialNumber : 00330-80000-00000-AA775 Version : 10.0.17763 PS C:\Users\masashi\python\nwdiag> $psversiontable Name Value ---- ----- PSVersion 5.1.17763.316 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.17763.316 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
ターミナルでexeを実行
powershellからteratermのexeを呼び出します。
pathにスペースがある場合は頭に&を付けないと実行できないようです。
# &を付けないとパスが出力されるのみ PS C:\Users\masashi> 'C:\Program Files (x86)\teraterm\ttermpro.exe' C:\Program Files (x86)\teraterm\ttermpro.exe PS C:\Users\masashi> # &を付けると別windowで実行されプロンプト返ってきます PS C:\Users\masashi> & 'C:\Program Files (x86)\teraterm\ttermpro.exe' PS C:\Users\masashi>
オプション
公式マニュアルで必要そうなものを確認します。
https://ttssh2.osdn.jp/manual/ja/commandline/teraterm.html
シンプルにログイン情報と作業ログが取れればいいでしょう。
- ログイン
- IP addressまたはホスト名
- /ssh
- /auth=passwd # パスワード認証
- /user=xxx
- /passwd=xxx
- ログ
- ホスト名、日付があればOK
- dateのフォーマットも使えます
- パスを指定しないとexeと同じディレクトリに書かれるのでhomeに指定します
- ホスト名の変数でexe実行と同じ&を使うので""で挟みます
- 最終的に/L="$HOME\&h_%Y%m%d.log"で取ります。
実践
上記をまとめたものがこちらです。
完全LAN環境ですが一応パスワードは隠しますw
1行だと長くなってしまうので改行します。
powershellだとバッククォートの記号を使うようです。
PS C:\Users\masashi> & 'C:\Program Files (x86)\teraterm\ttermpro.exe' ` /ssh 192.168.0.13 /auth=password ` /user=masashi /passwd=<password> /L="$HOME\&h_%Y%m%d.log"
GIFとかで操作画面が取れればよかったのですが、やり方がわからないのでターミナル越しに結果残します。
結果
PS C:\Users\masashi> ps -name ttermpro ps : 名前 "ttermpro" のプロセスが見つかりません。プロセス名を確認し、コマンドレットを再度呼び出してください。 発生場所 行:1 文字:1 + ps -name ttermpro + ~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (ttermpro:String) [Get-Process], ProcessCommandException + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand # プロセスが無いのでエラーで返ってきています。 PS C:\Users\masashi> & 'C:\Program Files (x86)\teraterm\ttermpro.exe' ` /ssh 192.168.0.13 /auth=password ` /user=masashi /passwd=<password> /L="$HOME\&h_%Y%m%d.log" PS C:\Users\masashi> ps -name ttermpro Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 292 25 11040 26664 1.55 12612 1 ttermpro # teratermが上がっています。 PS C:\Users\masashi> ls *.log ディレクトリ: C:\Users\masashi Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2019/04/07 15:03 511 192.168.0.13_20190407.log -a---- 2019/01/05 12:39 0 geckodriver.log #このファイルは今回関係ないです PS C:\Users\masashi> cat .\192.168.0.13_20190407.log Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-119-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage 128 個のパッケージがアップデート可能です。 1 個のアップデートはセキュリティアップデートです。 New release '18.04.2 LTS' available. Run 'do-release-upgrade' to upgrade to it. *** システムの再起動が必要です *** Last login: Sun Apr 7 14:57:15 2019 from 192.168.0.12 masashi@ubuntu:~$ PS C:\Users\masashi> PS C:\Users\masashi>
ログファイルもちゃんと作られていて、バナー表示のログも出力されていますね。
このサーバは2017年に作ったので18.04LTSへの通知が来ています。
しかし録画サーバなのでアップデートは悩ましいところですw
というわけでターミナルからの一発起動ログインができるようになりました。
macroゴリゴリ書いての起動も気持ちいいですが、お手軽ワンライナーログインもなかなかいいもんです。
参考サイト
PowerShellで外部プログラムを実行する - bakemoji |> log
コマンドプロンプトからTeratermで自動ログインを行う(マクロ不要) | 俺的備忘録 〜なんかいろいろ〜
追記
問題のパスワード部分も暗号化することができたので完全版の記事を書きました。