paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

コマンドからteratermを起動して一発ログイン

SIer業界の作業手順書でよくあるのが

  1. teratermを起動する
  2. 宛先、パスワード入力
  3. ログイン

みたいに画面での操作手順を記載しているパターンが多いと思います。
しかし何年も業界にいると画面ポチポチも面倒になってきます。

ログイン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で自動ログインを行う(マクロ不要) | 俺的備忘録 〜なんかいろいろ〜

追記

問題のパスワード部分も暗号化することができたので完全版の記事を書きました。

コマンドからteratermを起動して一発ログイン 完全版 - paloma blog