{"id":16174,"date":"2025-02-27T18:00:11","date_gmt":"2025-02-27T09:00:11","guid":{"rendered":"https:\/\/www.ecomottblog.com\/?p=16174"},"modified":"2025-03-05T14:03:03","modified_gmt":"2025-03-05T05:03:03","slug":"tcl-expect-%e3%81%a7%e3%82%b7%e3%82%a7%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e8%87%aa%e5%8b%95%e5%8c%96%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/www.ecomottblog.com\/?p=16174","title":{"rendered":"Tcl\/Expect \u3067\u30b7\u30a7\u30eb\u30ed\u30b0\u30a4\u30f3\u3092\u81ea\u52d5\u5316\u3059\u308b"},"content":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\uff01\u30c7\u30d0\u30a4\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u90e8\u306e\u672c\u9593\u3067\u3059\u3002<\/p>\n<p>\u5f0a\u793e\u3067\u306f\u30c7\u30fc\u30bf\u30ed\u30ac\u30fc\u3084\u901a\u4fe1\u578b\u30c9\u30e9\u30a4\u30d6\u30ec\u30b3\u30fc\u30c0\u30fc\u306a\u3069\u3001\u69d8\u3005\u306a IoT \u30c7\u30d0\u30a4\u30b9\u3092\u958b\u767a\u30fb\u8ca9\u58f2\u3057\u3066\u304a\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u307e\u3067\u306b\u591a\u304f\u306e\u30c7\u30d0\u30a4\u30b9\u306e FW \u958b\u767a\u30fb\u4fdd\u5b88\u306b\u643a\u308f\u3089\u305b\u3066\u9802\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>FW \u3092\u958b\u767a\u30fb\u4fdd\u5b88\u3059\u308b\u969b\u306b\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u30d1\u30c3\u30c1\u3084\u30ed\u30b0\u89e3\u6790\u306e\u70ba\u306b\u3001\u30c7\u30d0\u30a4\u30b9\u6bce\u306b\u7570\u306a\u308b\u624b\u9806\u3067\u30c7\u30d0\u30a4\u30b9\u5185\u90e8\u3078\u30a2\u30af\u30bb\u30b9\uff08\u30b7\u30a7\u30eb\u30ed\u30b0\u30a4\u30f3\uff09\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u30a2\u30af\u30bb\u30b9\u3059\u308b\u7d4c\u8def\u3082\u30a4\u30fc\u30b5\u30cd\u30c3\u30c8\u3001 LTE \u56de\u7dda\u3001RS-232C\u3001UART \u306a\u3069\u591a\u5c90\u306b\u308f\u305f\u308a\u307e\u3059\u3002\u305d\u306e\u70ba\u3001\u30c7\u30d0\u30a4\u30b9\u6bce\u306b\u63a5\u7d9a\u624b\u9806\u3084\u30ed\u30b0\u30a4\u30f3\u60c5\u5831\uff08\u9375\uff09\u306a\u3069\u3092\u9069\u5207\u306b\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u307e\u305f\u3001\u4f5c\u696d\u52b9\u7387\u5316\u306e\u305f\u3081\u306b\u3001\u63a5\u7d9a\u30fb\u30ed\u30b0\u30a4\u30f3\u306e\u4e00\u9023\u306e\u6d41\u308c\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u306f\u6b20\u304b\u305b\u307e\u305b\u3093\u3002<\/p>\n<p><!--more--><\/p>\n<p>\u79c1\u306f\u3001\u30c7\u30d0\u30a4\u30b9\u3078\u306e\u63a5\u7d9a\u30fb\u30ed\u30b0\u30a4\u30f3\u3092\u81ea\u52d5\u5316\u3059\u308b\u30c4\u30fc\u30eb\u3068\u3057\u3066\u3001<strong>Tera Term<\/strong> \u3068\u3044\u3046\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u65e5\u672c\u306e\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u73fe\u5834\u3067\u306f\u3088\u304f\u4f7f\u308f\u308c\u308b\u30c4\u30fc\u30eb\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u3057\u304b\u3057\u3001Tera Term \u306f Windows \u5c02\u7528\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067 Windows \u4ee5\u5916\u306e\u74b0\u5883\u3067\u306f\u4f7f\u7528\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u8ab2\u984c\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u305d\u3053\u3067\u4eca\u56de\u306f\u3001Tera Term \u306e\u4ee3\u66ff\u3068\u3057\u3066\u3001\u304b\u3064\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u52d5\u4f5c\u3059\u308b\u30c4\u30fc\u30eb\u3067\u3042\u308b&nbsp;<strong>Tcl\/Expect<\/strong> \u3092\u7d39\u4ecb\u3055\u305b\u3066\u9802\u304d\u307e\u3059\u3002Tcl\/Expect \u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001Tera Term\u306e\u3088\u3046\u306b\u30bf\u30fc\u30b2\u30c3\u30c8\u3078\u306e\u63a5\u7d9a\u30fb\u30ed\u30b0\u30a4\u30f3\u3092\u81ea\u52d5\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n<h1>Tera Term \u306b\u3064\u3044\u3066<\/h1>\n<p data-pm-slice=\"1 1 []\">Tera Term \u306f Windows \u5411\u3051\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u3067\u3059\u3002\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u3068\u3057\u3066\u306e\u6a5f\u80fd\u4ee5\u5916\u306b\u3001SSH \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3001Telnet \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3001\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u5185\u8535\u3057\u3066\u304a\u308a\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3084\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u3092\u4ecb\u3057\u3066\u30bf\u30fc\u30b2\u30c3\u30c8\u3078\u7aef\u672b\u63a5\u7d9a\uff06\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002SCP \u3084 XMODEM \u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u8ee2\u9001\u3092 GUI \u3067\u7c21\u5358\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u4e2d\u3067\u3082\u5f37\u529b\u306a\u6a5f\u80fd\u304c Tera Term \u30de\u30af\u30ed\u3067\u3059\u3002<a href=\"https:\/\/teratermproject.github.io\/manual\/5\/ja\/macro\/syntax\/index.html\">\u30de\u30af\u30ed\u8a00\u8a9e &#8220;Tera Term Language (TTL)&#8221;<\/a> \u3092\u8a18\u8ff0\u3059\u308b\u3053\u3068\u3067\u3001\u30bf\u30fc\u30df\u30ca\u30eb\u306e\u8d77\u52d5\u30fb\u5236\u5fa1\u3001SSH \u3084\u30b7\u30ea\u30a2\u30eb\u306b\u3088\u308b\u63a5\u7d9a\u30fb\u30ed\u30b0\u30a4\u30f3\u306a\u3069\u306e\u4e00\u9023\u306e\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Tera Term \u30de\u30af\u30ed\u306e\u30de\u30cb\u30e5\u30a2\u30eb\u306f<a href=\"https:\/\/teratermproject.github.io\/manual\/5\/ja\/macro\/\">\u3053\u3061\u3089<\/a>\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n<h1>Tcl\/Expect \u3068\u306f\uff1f<\/h1>\n<p>Tcl\/Expect \u3068\u306f\u3001\u5bfe\u8a71\u578b CUI \u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u306e\u3084\u308a\u53d6\u308a\u3092\u81ea\u52d5\u5316\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3059\u3002<a href=\"https:\/\/ja.wikipedia.org\/wiki\/Tcl\">Tcl<\/a> \u3068\u3044\u3046\u30b9\u30af\u30ea\u30d7\u30c8\u8a00\u8a9e\u3092\u62e1\u5f35\u3057\u305f\u3082\u306e\u3067\u3042\u308a\u3001Tcl \u306e\u6587\u6cd5\u3067\u5bfe\u8a71\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002\u30de\u30a4\u30ca\u30fc\u306a\u8a00\u8a9e\u3068\u601d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u4ed6\u306b <a href=\"https:\/\/ja.wikipedia.org\/wiki\/Tk_(%E3%83%84%E3%83%BC%E3%83%AB%E3%82%AD%E3%83%83%E3%83%88)\">Tcl\/Tk<\/a> \u3068\u3044\u3046\u6b74\u53f2\u306e\u3042\u308b\u6709\u540d\u306a GUI \u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\u304c\u3042\u308a\u3001\u77ed\u3044\u30b3\u30fc\u30c9\u3067\u7c21\u5358\u306b GUI \u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002Tcl \u306f Lisp \u3092\u5f77\u5f7f\u3068\u3055\u305b\u308b\u7279\u6b8a\u306a\u8a00\u8a9e\u3067\u3059\u304c\u3001Expect \u3084 Tk \u3068\u3044\u3046\u5f37\u529b\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u5b58\u5728\u304b\u3089\u3001\u4eca\u3067\u3082\u5b66\u3076\u4fa1\u5024\u306f\u3042\u308b\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<p>Tcl\/Expect \u3092\u542b\u3080\u3053\u308c\u3089\u306e\u30c4\u30fc\u30eb\u306f\u6b74\u53f2\u304c\u3042\u308a\u67af\u308c\u305f\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067\u3042\u308b\u70ba\u3001\u69d8\u3005\u306a\u74b0\u5883\u306b\u79fb\u690d\u3055\u308c\u3066\u304a\u308a\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u306a\u304a\u3001Tcl \u62e1\u5f35\u3067\u3042\u308b\u3053\u3068\u3092\u5f37\u8abf\u3059\u308b\u305f\u3081\u306b &#8220;Tcl\/Expect&#8221; \u3068\u8868\u8a18\u3057\u3066\u3044\u307e\u3057\u305f\u304c\u3001Expect \u304c\u6b63\u5f0f\u540d\u79f0\u3067\u3042\u308b\u305f\u3081\u3001\u4ee5\u964d\u306f <strong>&#8220;Expect&#8221;<\/strong> \u3068\u8868\u8a18\u3057\u307e\u3059\u3002<\/p>\n<h1>Expect \u3067\u81ea\u52d5\u5316\u3057\u3066\u307f\u308b<\/h1>\n<p>Expect \u3067\u63a5\u7d9a\u30fb\u30ed\u30b0\u30a4\u30f3\u3092\u81ea\u52d5\u5316\u3059\u308b\u74b0\u5883\u3092\u6e96\u5099\u3057\u307e\u3059\u3002Expect \u4ee5\u5916\u306b\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u3084\u5404\u7a2e\u901a\u4fe1\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002\u5177\u4f53\u7684\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u4f8b\u3092\u4ee5\u4e0b\u306b\u6319\u3052\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u3001cygwin (msys) \u3084 macOS,&nbsp; \u5404\u7a2e Linux \u30c7\u30a3\u30b9\u30c8\u30ed\u306a\u3069\u3001\u69d8\u3005\u306a\u74b0\u5883\u3067\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u3057\u3066\u5229\u7528\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<table>\n<thead>\n<tr>\n<th>\u7a2e\u5225<\/th>\n<th>\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u540d<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf<\/td>\n<td>mintty, iTerm, Xterm, URxvt<\/td>\n<\/tr>\n<tr>\n<td>SSH \u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/td>\n<td>OpenSSH<\/td>\n<\/tr>\n<tr>\n<td>Telnet \u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/td>\n<td>netkit-telnet, inetutils-telnet<\/td>\n<\/tr>\n<tr>\n<td>\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/td>\n<td>cu, picocom \u203b<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u203b minicom \u3084 screen \u3067\u3082\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u3067\u304d\u307e\u3059\u304c\u3001\u3053\u308c\u3089\u306f curses \u306b\u3088\u308b TUI \u3092\u51fa\u529b\u3059\u308b\u70ba\u3001\u884c\u6307\u5411\u306e Expect \u3068\u76f8\u6027\u304c\u60aa\u3044\u3067\u3059\u3002<\/p>\n<h2>SSH \u63a5\u7d9a\u3092\u81ea\u52d5\u5316\u3059\u308b<\/h2>\n<p>\u305d\u308c\u3067\u306f Expect \u3067 SSH \u63a5\u7d9a\u3092\u81ea\u52d5\u5316\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306f localhost \u3067\u8d77\u52d5\u3057\u3066\u3044\u308b WSL2 (Ubuntu 24) \u3078 SSH \u63a5\u7d9a\u3059\u308b Tera Term \u30de\u30af\u30ed\u3067\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\" title=\"SSH \u63a5\u7d9a\u3059\u308b Tera Term \u30de\u30af\u30ed\">; SSH \u63a5\u7d9a\u5148\nHOSTNAME = 'localhost:22' ; \u63a5\u7d9a\u5148\u30db\u30b9\u30c8\u30fb\u30dd\u30fc\u30c8\n\n; \u30ed\u30b0\u30a4\u30f3\u60c5\u5831\nUSERNAME = 'testuser' ; \u30ed\u30b0\u30a4\u30f3\u30e6\u30fc\u30b6\nUSERPASSWD = '12345'  ; \u30ed\u30b0\u30a4\u30f3\u30d1\u30b9\u30ef\u30fc\u30c9\nROOTPASSWD = 'root'   ; root \u30d1\u30b9\u30ef\u30fc\u30c9\n\n; \u30b3\u30de\u30f3\u30c9\u69cb\u7bc9\nCOMMAND = HOSTNAME\nstrconcat COMMAND ' \/ssh \/2 \/auth=passwd \/user='\nstrconcat COMMAND USERNAME\nstrconcat COMMAND ' \/passwd='\nstrconcat COMMAND USERPASSWD\n\n; SSH \u63a5\u7d9a\nconnect COMMAND\n\n; root \u306b\u6607\u683c\nwait '$'\nsendln 'su'\nwait 'Password:'\nsendln ROOTPASSWD\nwait '#'\nsendln 'whoami'<\/pre>\n<p>\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u3067\u30b7\u30a7\u30eb\u3078\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u5f8c\u3001root \u3078\u6607\u683c\u3057\u3066\u3044\u307e\u3059\u3002\u307e\u305a\u3001connect \u30b3\u30de\u30f3\u30c9\u3067\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u8d77\u52d5\u3057\u3001SSH \u63a5\u7d9a\u30fb\u30ed\u30b0\u30a4\u30f3\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u7d9a\u3044\u3066\u3001wait \u30b3\u30de\u30f3\u30c9\u3067\u30b7\u30a7\u30eb\u30d7\u30ed\u30f3\u30d7\u30c8\u3084\u30d1\u30b9\u30ef\u30fc\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u6587\u5b57\u5217\u8868\u793a\u3092\u5f85\u6a5f\u3057\u3001sendln \u30b3\u30de\u30f3\u30c9\u3067\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3084\u30d1\u30b9\u30ef\u30fc\u30c9\u5165\u529b\u306e\u305f\u3081\u306e\u6587\u5b57\u5217\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e Tera Term \u30de\u30af\u30ed\u3092 Expect \u30b9\u30af\u30ea\u30d7\u30c8\u3067\u66f8\u304d\u76f4\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4ee5\u4e0b\u304c\u66f8\u304d\u76f4\u3057\u305f\u5f8c\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\" title=\"SSH \u63a5\u7d9a\u3059\u308b Tcl\/Expect \u30b9\u30af\u30ea\u30d7\u30c8\">#!\/usr\/bin\/expect\n\n# SSH \u63a5\u7d9a\u5148\nset HOSTNAME \"localhost\" ; # \u63a5\u7d9a\u5148\u30db\u30b9\u30c8\nset SSHPORT \"22\"         ; # \u63a5\u7d9a\u5148\u30dd\u30fc\u30c8\n\n# \u30ed\u30b0\u30a4\u30f3\u60c5\u5831\nset USERNAME \"testuser\" ; # \u30ed\u30b0\u30a4\u30f3\u30e6\u30fc\u30b6\nset USERPASSWD \"12345\"  ; # \u30ed\u30b0\u30a4\u30f3\u30d1\u30b9\u30ef\u30fc\u30c9\nset ROOTPASSWD \"root\"   ; # root \u30d1\u30b9\u30ef\u30fc\u30c9\n\n# SSH \u63a5\u7d9a\nspawn ssh -p$SSHPORT $USERNAME@$HOSTNAME\nexpect {\n    -re \"yes\/no\" {\n        send \"yes\\r\"\n        exp_continue\n    }\n    -re \"\\[Pp\\]assword:\" {\n        send \"$USERPASSWD\\r\"\n    }\n}\n\n# root \u306b\u6607\u683c\nexpect \"$ \"\nsend \"su\\r\"\nexpect \"Password:\"\nsend \"$ROOTPASSWD\\r\"\nexpect \"# \"\nsend \"whoami\\r\"\n\n# ssh \u30b3\u30de\u30f3\u30c9\u306e\u5165\u51fa\u529b\u3092\u7591\u4f3c\u7aef\u672b\uff08\u30e6\u30fc\u30b6\uff09\u3078\u63a5\u7d9a\ninteract<\/pre>\n<p>Expect \u3068\u5bfe\u8a71\u3055\u305b\u305f\u3044\u30b3\u30de\u30f3\u30c9\u306f spawn \u30b3\u30de\u30f3\u30c9\u3067\u8d77\u52d5\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f ssh \u63a5\u7d9a\u3092\u81ea\u52d5\u5316\u3059\u308b\u305f\u3081\u3001ssh \u30b3\u30de\u30f3\u30c9\u3092 spawn \u3067\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d1\u30b9\u30ef\u30fc\u30c9\u5165\u529b\u306e\u70ba\u3001ssh \u30b3\u30de\u30f3\u30c9\u304c\u51fa\u529b\u3059\u308b\u7279\u5b9a\u306e\u6587\u5b57\u5217\u3092\u5f85\u6a5f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u306f expect \u30b3\u30de\u30f3\u30c9\u3067\u51e6\u7406\u3057\u307e\u3059\u3002-re \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u308b\u3053\u3068\u3067\u6b63\u898f\u8868\u73fe\u306b\u3088\u308b\u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u3082\u53ef\u80fd\u3067\u3059\u3002\u63a5\u7d9a\u5148\u304c\u521d\u3081\u3066\u63a5\u7d9a\u3059\u308b\u30db\u30b9\u30c8\u306e\u5834\u5408\u306f\u3001\u516c\u958b\u9375\u78ba\u8a8d\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\uff08yes\/no\uff09\u304c\u8868\u793a\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u5834\u5408\u306f send \u30b3\u30de\u30f3\u30c9\u3067 yes \u3092\u5165\u529b\u3057\u3001exp_continue \u30b3\u30de\u30f3\u30c9\u3067\u5f85\u6a5f\u3092\u7d99\u7d9a\u3057\u307e\u3059\u3002<\/p>\n<p>Expect \u306b\u3088\u308b\u5bfe\u8a71\u304c\u5b8c\u4e86\u3057\u30ed\u30b0\u30a4\u30f3\u3067\u304d\u305f\u5f8c\u306f\u3001interact \u30b3\u30de\u30f3\u30c9\u3067 ssh \u30b3\u30de\u30f3\u30c9\u306e\u5165\u51fa\u529b\u5236\u5fa1\u3092 Expect \u304b\u3089\u30e6\u30fc\u30b6\u3078\u5207\u308a\u66ff\u3048\u307e\u3059\u3002<\/p>\n<p>\u305d\u308c\u3067\u306f\u5b9f\u6f14\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4e0a\u8a18\u30b9\u30af\u30ea\u30d7\u30c8\u3092 ssh-login.tcl \u3068\u3057\u3066\u4fdd\u5b58\u3057\u3066\u5b9f\u884c\u6a29\u9650\u3092\u4ed8\u3051\u3001Xterm \u304b\u3089\u305d\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono font-size:14 line-height:16 striped:false nums:false nums-toggle:false plain-toggle:false show-plain-default:true lang:sh decode:true\" title=\"SSH \u63a5\u7d9a\u3059\u308b Tcl\/Expect \u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5b9f\u884c\u7d50\u679c\">kiyoshi@ecmt-khomma2: ~\/Work\n[---] $ ssh-login.tcl \nspawn ssh -p22 testuser@localhost\nThe authenticity of host 'localhost (127.0.0.1)' can't be established.\nED25519 key fingerprint is SHA256:QtRNXJo5btAykyJJnF\/JWflzFREYs\/2FFDY0V0V8Htk.\nThis key is not known by any other names.\nAre you sure you want to continue connecting (yes\/no\/[fingerprint])? yes\nWarning: Permanently added 'localhost' (ED25519) to the list of known hosts.\ntestuser@localhost's password: \nWelcome to Ubuntu 24.04.1 LTS (GNU\/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)\n\n * Documentation:  https:\/\/help.ubuntu.com\n * Management:     https:\/\/landscape.canonical.com\n * Support:        https:\/\/ubuntu.com\/pro\n\nLast login: Wed Feb 26 15:14:57 2025 from 127.0.0.1\ntestuser@ecmt-khomma2:~$ su\nPassword: \nroot@ecmt-khomma2:\/home\/testuser# whoami\nroot\nroot@ecmt-khomma2:\/home\/testuser#<\/pre>\n<p class=\"\">\u7121\u4e8b SSH \u30ed\u30b0\u30a4\u30f3\u3057 root \u30e6\u30fc\u30b6\u306b\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u30b9\u30af\u30ea\u30d7\u30c8\u5b9f\u884c\u4e2d\u306f\u4e00\u5207\u30ad\u30fc\u5165\u529b\u3057\u3066\u3044\u307e\u305b\u3093\u3002ssh \u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u304b\u3089\u516c\u958b\u9375\u78ba\u8a8d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u5165\u529b\u3001root \u6607\u683c\u307e\u3067\u306e\u4e00\u9023\u306e\u6d41\u308c\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h2>\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3092\u81ea\u52d5\u5316\u3059\u308b<\/h2>\n<p>\u6b21\u306b\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3092\u81ea\u52d5\u5316\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>\u4e0b\u8a18\u306f COM3 \u30dd\u30fc\u30c8\u3078\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3055\u308c\u305f\u30bf\u30fc\u30b2\u30c3\u30c8\u3078\u30ed\u30b0\u30a4\u30f3\u3059\u308b Tera Term \u30de\u30af\u30ed\u3067\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\" title=\"\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3059\u308b Tera Term \u30de\u30af\u30ed\">; \u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u8a2d\u5b9a\nCOM_PORT = '3'     ; \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b COM \u30dd\u30fc\u30c8\u756a\u53f7\nBAUDRATE = '38400' ; \u30dc\u30fc\u30ec\u30fc\u30c8\nDATABIT = '8'      ; \u30c7\u30fc\u30bf\nPARITY = 'none'    ; \u30d1\u30ea\u30c6\u30a3\nSTOPBIT = '1'      ; \u30b9\u30c8\u30c3\u30d7\u30d3\u30c3\u30c8\nFLOWCTRL = 'none'  ; \u30d5\u30ed\u30fc\u5236\u5fa1\nDELAYPERCHAR = '0' ; \u9001\u4fe1\u9045\u5ef6\u6642\u9593(\u30df\u30ea\u79d2)\nDELAYPERLINE = '0' ; \u9001\u4fe1\u9045\u5ef6\u6642\u9593(\u30df\u30ea\u79d2)\n\n; \u30ed\u30b0\u30a4\u30f3\u60c5\u5831\nUSERNAME = 'testuser' ; \u30ed\u30b0\u30a4\u30f3\u30e6\u30fc\u30b6\nUSERPASSWD = '12345'  ; \u30ed\u30b0\u30a4\u30f3\u30d1\u30b9\u30ef\u30fc\u30c9\nROOTPASSWD = 'root'   ; root \u30d1\u30b9\u30ef\u30fc\u30c9\n\n; \u30b3\u30de\u30f3\u30c9\u69cb\u7bc9\nCOMMAND = '\/C='\nstrconcat COMMAND COM_PORT \nstrconcat COMMAND ' \/BAUD='\nstrconcat COMMAND BAUDRATE\nstrconcat COMMAND ' \/CDATABIT='\nstrconcat COMMAND DATABIT\nstrconcat COMMAND ' \/CPARITY='\nstrconcat COMMAND PARITY\nstrconcat COMMAND ' \/CSTOPBIT='\nstrconcat COMMAND STOPBIT\nstrconcat COMMAND ' \/CFLOWCTRL='\nstrconcat COMMAND FLOWCTRL\nstrconcat COMMAND ' \/CDELAYPERCHAR='\nstrconcat COMMAND DELAYPERCHAR\nstrconcat COMMAND ' \/CDELAYPERLINE='\nstrconcat COMMAND DELAYPERLINE\n\n; \u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\nconnect COMMAND\n\n; getty \u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u8868\u793a\u3055\u305b\u308b\u305f\u3081\u306b\u6539\u884c\u9001\u4fe1\nsendln ''\n\n; \u30b7\u30a7\u30eb\u3078\u30ed\u30b0\u30a4\u30f3\nwait 'login:'\nsendln USERNAME\nwait 'Password:'\nsendln USERPASSWD\n\n; root \u306b\u6607\u683c\nwait '$ '\nsendln 'su'\nwait 'Password:'\nsendln ROOTPASSWD\nwait '# '\nsendln 'whoami'<\/pre>\n<p>\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u3067\u30b7\u30a7\u30eb\u3078\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u5f8c\u3001root \u3078\u6607\u683c\u3057\u3066\u3044\u307e\u3059\u3002connect \u30b3\u30de\u30f3\u30c9\u3067\u306f\u3001\u9069\u5207\u306a\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8a2d\u5b9a\u3057\u3066\u30dd\u30fc\u30c8\u3078\u63a5\u7d9a\u3057\u307e\u3059\u3002\u307e\u305f SSH \u63a5\u7d9a\u3068\u306f\u9055\u3044\u3001\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u63a5\u7d9a\u5f8c\u306b\u30ad\u30fc\u5165\u529b\u306b\u3088\u308b\u30ed\u30b0\u30a4\u30f3\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\uff08\u4e0b\u8a18\u3067\u306f getty \u306b\u5bfe\u3057\u3066\u30ed\u30b0\u30a4\u30f3\u51e6\u7406\u3057\u3066\u3044\u308b\uff09<\/p>\n<p>\u3053\u306e Tera Term \u30de\u30af\u30ed\u3092 Expect \u30b9\u30af\u30ea\u30d7\u30c8\u3067\u66f8\u304d\u76f4\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4e0b\u8a18\u304c\u66f8\u304d\u76f4\u3057\u305f\u5f8c\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\" title=\"\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3059\u308b Tcl\/Expect \u30b9\u30af\u30ea\u30d7\u30c8\">#!\/usr\/bin\/expect\n\n# \u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u8a2d\u5b9a\nset DEVICE \"\/dev\/ttyS0\"   ; # \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b RS-232C I\/F\nset BAUDRATE \"38400\"      ; # \u30dc\u30fc\u30ec\u30fc\u30c8\nset DATABIT \"cs8\"         ; # \u30c7\u30fc\u30bf\u30d3\u30c3\u30c8\nset PARITY \"-parenb\"      ; # \u30d1\u30ea\u30c6\u30a3\u306a\u3057\nset STOPBIT \"-cstopb\"     ; # \u30b9\u30c8\u30c3\u30d7\u30d3\u30c3\u30c81\nset SWFLOWCTRL \"-ixon\"    ; # \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30d5\u30ed\u30fc\u5236\u5fa1\u306a\u3057\nset HWFLOWCTRL \"-crtscts\" ; # \u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30d5\u30ed\u30fc\u5236\u5fa1\u306a\u3057\n\n# \u30ed\u30b0\u30a4\u30f3\u60c5\u5831\nset USERNAME \"testuser\" ; # \u30ed\u30b0\u30a4\u30f3\u30e6\u30fc\u30b6\nset USERPASSWD \"12345\"  ; # \u30ed\u30b0\u30a4\u30f3\u30d1\u30b9\u30ef\u30fc\u30c9\nset ROOTPASSWD \"root\"   ; # root \u30d1\u30b9\u30ef\u30fc\u30c9\n\n# \u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u8a2d\u5b9a\u3092\u9069\u7528\nexec stty -F $DEVICE $BAUDRATE $DATABIT $PARITY $STOPBIT $SWFLOWCTRL $HWFLOWCTRL\n\n# \u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\nspawn cu -l $DEVICE -s $BAUDRATE\n\n# getty \u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u8868\u793a\u3055\u305b\u308b\u305f\u3081\u306b\u6539\u884c\u9001\u4fe1\nsend \"\\r\"\n\n# \u30b7\u30a7\u30eb\u3078\u30ed\u30b0\u30a4\u30f3\nexpect {\n    \"login:\" {\n        send \"$USERNAME\\r\"\n        exp_continue\n    }\n    \"Password:\" {\n        send \"$USERPASSWD\\r\"\n    }\n}\n\n# root \u306b\u6607\u683c\nexpect \"$ \"\nsend \"su\\r\"\nexpect \"Password:\"\nsend \"$ROOTPASSWD\\r\"\nexpect \"# \"\nsend \"whoami\\r\"\n\n# cu \u30b3\u30de\u30f3\u30c9\u306e\u5165\u51fa\u529b\u3092\u7591\u4f3c\u7aef\u672b\uff08\u30e6\u30fc\u30b6\uff09\u3078\u63a5\u7d9a\ninteract<\/pre>\n<p>ssh \u63a5\u7d9a\u6642\u3068\u9055\u3046\u70b9\u3068\u3057\u3066\u306f\u3001spawn \u30b3\u30de\u30f3\u30c9\u3067\u8d77\u52d5\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3092\u81ea\u52d5\u5316\u3059\u308b\u305f\u3081\u3001cu \u30b3\u30de\u30f3\u30c9\u3092 spawn \u3067\u8d77\u52d5\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u306e\u52d5\u4f5c\u306f\u4e8b\u524d\u306b stty \u30b3\u30de\u30f3\u30c9\u3067\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u305d\u308c\u3067\u306f\u5b9f\u6f14\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4e0a\u8a18\u30b9\u30af\u30ea\u30d7\u30c8\u3092 serial-login.tcl \u3068\u3057\u3066\u4fdd\u5b58\u3057\u3066\u5b9f\u884c\u6a29\u9650\u3092\u4ed8\u3051\u3001Xterm \u304b\u3089\u305d\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono font-size:14 line-height:16 striped:false nums:false nums-toggle:false plain-toggle:false show-plain-default:true lang:sh decode:true\" title=\"\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3059\u308b Tcl\/Expect \u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5b9f\u884c\u7d50\u679c\">kiyoshi@ecmt-khomma2: ~\/Work\n[---] $ serial-login.tcl \nspawn cu -l \/dev\/ttyS0 -s 38400\n\nConnected.\n\ntest-machine login: testuser\nPassword: \nWelcome to Ubuntu 22.04.2 LTS (GNU\/Linux 5.15.0-67-generic x86_64)\n\n * Documentation:  https:\/\/help.ubuntu.com\n * Management:     https:\/\/landscape.canonical.com\n * Support:        https:\/\/ubuntu.com\/pro\n\ntestuser@test-machine:~$ su\nPassword: \nroot@test-machine:\/home\/testuser# whoami\nroot\nroot@test-machine:\/home\/testuser#<\/pre>\n<p>\u7121\u4e8b\u306b\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u3057\u3066 root \u30e6\u30fc\u30b6\u306b\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u30b9\u30af\u30ea\u30d7\u30c8\u5b9f\u884c\u4e2d\u306f\u4e00\u5207\u30ad\u30fc\u5165\u529b\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u30b7\u30ea\u30a2\u30eb\u63a5\u7d9a\u6642\u306b\u304a\u3044\u3066\u3082\u3001\u4e00\u9023\u306e\u6d41\u308c\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h2>\u5fdc\u7b54\u5f85\u3061\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3092\u8a2d\u5b9a\u3059\u308b<\/h2>\n<p>\u4f55\u304b\u3057\u3089\u306e\u7406\u7531\u3067\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u5fdc\u7b54\u305b\u305a\u3001\u63a5\u7d9a\u30fb\u30ed\u30b0\u30a4\u30f3\u3067\u304d\u306a\u3044\u72b6\u6cc1\u306f\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u304b\u3089\u306e\u5fdc\u7b54\u3092\u5f85\u3064\u30bf\u30a4\u30de\u30fc\u3092\u8a2d\u5b9a\u3057\u3001\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u305f\u5834\u5408\u306f\u63a5\u7d9a\u5931\u6557\u3068\u3057\u3066\u9069\u5207\u306a\u63aa\u7f6e\uff08\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u7d42\u4e86\u306a\u3069\uff09\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u4e0b\u8a18\u306f Tera Term \u30de\u30af\u30ed\u306b\u304a\u3051\u308b\u5fdc\u7b54\u5f85\u3061\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306e\u8a2d\u5b9a\u4f8b\u3067\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\" title=\"\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u4f8b\uff08Tera Term \u30de\u30af\u30ed\uff09\">; \u30bf\u30fc\u30b2\u30c3\u30c8\u3078 SSH \u63a5\u7d9a\nconnect 'localhost:22 \/ssh \/2 \/auth=passwd \/user=testuser \/passwd=12345'\n\n; \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3092\uff15\u79d2\u306b\u8a2d\u5b9a\ntimeout = 5\n\n; \u30b7\u30a7\u30eb\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u8868\u793a\u3055\u308c\u308b\u307e\u3067\u5f85\u6a5f\nwait '$'\n\n; \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u305f\u5834\u5408\uff08result \u304c 0\uff09\u3001\u30de\u30af\u30ed\u3092\u7d42\u4e86\nif result=0 then\n   exit         \nendif<\/pre>\n<p>Expect \u3067\u3082\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306b\u5bfe\u8a71\u30b3\u30de\u30f3\u30c9\u306e\u5fdc\u7b54\u5f85\u3061\u306b\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\" title=\"\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u4f8b\uff08TCL\/Expect \u30de\u30af\u30ed\uff09\">#!\/usr\/bin\/expect\n\n# \u30bf\u30fc\u30b2\u30c3\u30c8\u3078 SSH \u63a5\u7d9a\nspawn ssh testuser@localhost\n\n# \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3092\uff15\u79d2\u306b\u8a2d\u5b9a\nset timeout 5\n\n# \u30d1\u30b9\u30ef\u30fc\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u8868\u793a\u3055\u308c\u308b\u307e\u3067\u5f85\u6a5f\n# \uff08\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u305f\u5834\u5408\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7d42\u4e86\uff09\nexpect {\n    -re \"yes\/no\" {\n        send \"yes\\r\"\n        exp_continue\n    }\n    -re \"\\[Pp\\]assword:\" {\n        send \"12345\\r\"\n    }\n    timeout {\n        puts \"Connection timed out.\"\n        exit 1\n    }\n}<\/pre>\n<h2>\u4f5c\u696d\u30ed\u30b0\u3092\u8a18\u9332\u3059\u308b<\/h2>\n<p>\u8a66\u9a13\u3084\u672c\u756a\u74b0\u5883\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6642\u306b\u3001\u30a8\u30d3\u30c7\u30f3\u30b9\u3068\u3057\u3066\u30bf\u30fc\u30b2\u30c3\u30c8\u3084\u30ea\u30e2\u30fc\u30c8\u306e\u4f5c\u696d\u5c65\u6b74\u3092\u8a18\u9332\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u305f\u3053\u3068\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\uff1f<br \/>\n\u3082\u3057\u305d\u3093\u306a\u30b1\u30fc\u30b9\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u306f\u3001Tera Term \u306e\u30ed\u30b0\u8a18\u9332\u6a5f\u80fd\u304c\u5f79\u306b\u7acb\u3064\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002Tera Term \u3067\u306f\u7aef\u672b\u63a5\u7d9a\u5f8c\u306e\u51fa\u529b\uff08\u30ea\u30e2\u30fc\u30c8\u304b\u3089\u53d7\u4fe1\u3057\u305f\u6587\u5b57\u5217\uff09\u3092\u30ed\u30b0\u4fdd\u5b58\u3067\u304d\u3001\u4f5c\u696d\u5c65\u6b74\u3068\u3057\u3066\u8a18\u9332\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u305d\u308c\u3092\u30de\u30af\u30ed\u3067\u5b9f\u884c\u3059\u308b\u4f8b\u3067\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\" title=\"\u30ed\u30b0\u8a18\u9332\uff08Tera Term\uff09\">; \u30bf\u30fc\u30b2\u30c3\u30c8\u3078 SSH \u63a5\u7d9a\nconnect 'localhost:22 \/ssh \/2 \/auth=passwd \/user=testuser \/passwd=12345'\n\n; \u30ed\u30b0\u8a18\u9332\u5148\u306e\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u751f\u6210\ngettime LOGFILE 'C:\\Temp\\%Y%m%d-%H%M%S.log'\n\n; \u30ed\u30b0\u8a18\u9332\u958b\u59cb\nlogopen LOGFILE 0 0\n\n; \u4f5c\u696d\u7d42\u4e86\u307e\u3067\u5f85\u6a5f\ntimeout = 0\nwaitevent 4\n\n; \u30ed\u30b0\u8a18\u9332\u7d42\u4e86\nlogclose\nexit<\/pre>\n<p>Expect \u3067\u3082\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u5b9f\u884c\u4e2d\u306e\u51fa\u529b\u3092\u30ed\u30b0\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u7aef\u672b\u63a5\u7d9a\u5f8c\u306e\u64cd\u4f5c\u3092\u8a18\u9332\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"font:ubuntu-mono lang:sh decode:true\">#!\/usr\/bin\/expect\n\n# \u30ed\u30b0\u8a18\u9332\u5148\u306e\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u751f\u6210\nset logfile \"\/tmp\/[clock format [clock seconds] -format {%Y%m%d-%H%M%S}].log\"\n\n# \u30ed\u30b0\u8a18\u9332\u958b\u59cb\nlog_file -noappend $logfile\n\n# \u30bf\u30fc\u30b2\u30c3\u30c8\u3078 SSH \u63a5\u7d9a\nspawn ssh testuser@localhost\nexpect {\n    -re \"yes\/no\" {\n        send \"yes\\r\"\n        exp_continue\n    }\n    -re \"\\[Pp\\]assword:\" {\n        send \"12345\\r\"\n    }\n}\n\n# \u30b7\u30a7\u30eb\u64cd\u4f5c\uff08\u4f5c\u696d\u7d42\u4e86\u307e\u3067\u5f85\u6a5f\uff09\ninteract\n\n# \u30ed\u30b0\u8a18\u9332\u7d42\u4e86\nlog_file<\/pre>\n<h1>\u304a\u308f\u308a\u306b<\/h1>\n<p>\u4eca\u56de\u306f Expect \u3092\u7528\u3044\u305f\u30b7\u30a7\u30eb\u30ed\u30b0\u30a4\u30f3\u306e\u81ea\u52d5\u5316\u306b\u3064\u3044\u3066\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002\u7d39\u4ecb\u3057\u305f\u6a5f\u80fd\u3084\u4e8b\u4f8b\u306f\u307b\u3093\u306e\u4e00\u90e8\u306b\u3059\u304e\u307e\u305b\u3093\u3002\u30b3\u30de\u30f3\u30c9\u5f15\u6570\u3084\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u3089\u308c\u308b\u3088\u3046\u306b\u3059\u308c\u3070\u3001\u3088\u308a\u6c4e\u7528\u7684\u306a\u81ea\u52d5\u30ed\u30b0\u30a4\u30f3\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001Tk \u3092\u7d44\u307f\u8fbc\u3080\u3053\u3068\u3067\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5165\u51fa\u529b\u3092 GUI \u5316\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u30ed\u30b0\u30a4\u30f3\u51e6\u7406\u306b\u9650\u3089\u305a\u3001\u30c6\u30b9\u30c8\u3084\u904b\u7528\u7ba1\u7406\u306a\u3069\u306e\u4f5c\u696d\u3082\u81ea\u52d5\u5316\u3057\u3066\u3001\u65e5\u3005\u306e\u696d\u52d9\u306e\u52b9\u7387\u5316\u3092\u9032\u3081\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff01<\/p>\n<p>\u30a8\u30b3\u30e2\u30c3\u30c8\u3067\u306f\u4e00\u7dd2\u306b\u30e2\u30ce\u3065\u304f\u308a\u3092\u3057\u3066\u3044\u304f\u4ef2\u9593\u3092\u968f\u6642\u52df\u96c6\u3057\u3066\u3044\u307e\u3059\u3002\u5f0a\u793e\u306b\u5c11\u3057\u3067\u3082\u8208\u5473\u304c\u3042\u308b\u65b9\u306f\u305c\u3072\u4e0b\u8a18\u306e\u63a1\u7528\u30da\u30fc\u30b8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\uff01<\/p>\n<div style=\"width: 100%; display: flex; justify-content: space-around; flex-wrap: wrap;\">\n<div style=\"display: block; width: 60%; border: solid 1px #1ABB9A; text-align: center;\"><a style=\"display: block; padding: 16px;\" href=\"https:\/\/www.ecomott.co.jp\/recruit\/\" target=\"_blank\" rel=\"noopener\">\u52df\u96c6\u8981\u9805\uff08\u5f53\u793eHP\uff09<\/a><\/div>\n<div style=\"display: block; width: 60%; border: solid 1px #1ABB9A; text-align: center; margin: 30px 0;\"><a style=\"display: block; padding: 16px;\" href=\"https:\/\/www.wantedly.com\/companies\/ecomott2\/projects\" target=\"_blank\" rel=\"noopener\">Wantedly<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\uff01\u30c7\u30d0\u30a4\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u90e8\u306e\u672c\u9593\u3067\u3059\u3002 \u5f0a\u793e\u3067\u306f\u30c7\u30fc\u30bf\u30ed\u30ac\u30fc\u3084\u901a\u4fe1\u578b\u30c9\u30e9\u30a4\u30d6\u30ec\u30b3\u30fc\u30c0\u30fc\u306a\u3069\u3001\u69d8\u3005\u306a IoT \u30c7\u30d0\u30a4\u30b9\u3092\u958b\u767a\u30fb\u8ca9\u58f2\u3057\u3066\u304a\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u307e\u3067\u306b\u591a\u304f\u306e\u30c7\u30d0\u30a4\u30b9\u306e FW \u958b\u767a\u30fb\u4fdd\u5b88\u306b\u643a\u308f\u3089\u305b\u3066\u9802\u304d\u307e\u3057 [&hellip;]<\/p>\n","protected":false},"author":97,"featured_media":16548,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[216,30,35,148],"_links":{"self":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts\/16174"}],"collection":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/users\/97"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16174"}],"version-history":[{"count":12,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts\/16174\/revisions"}],"predecessor-version":[{"id":16552,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts\/16174\/revisions\/16552"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/media\/16548"}],"wp:attachment":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}