我的烏拉拉練功坊

請來參觀移植到 Google Firebase 的成績 https://oolala.xyz/ken73chen/

2021年5月25日

WinSCP + Windows Terminal

 使用 WinSCP 的時候,只要按下那個鍵,預設就會用 putty 登入這台 server。

來自 WinSCP 官網

也可以改用 Window Terminal,這樣一個 site 用一個 tab,省事很多。


我不確定哪一個版本開始的 Windows Terminal 可以這用開 tab,我用的是 Windows Terminal Preview 1.8.1032.0。

挑戰在於,大家明明都知道不應該存密碼,但都還是這樣做了,既然都已經存了,密碼當然要自動填入,否則不就白存了。

所以我用 Expect 自動輸入密碼。 

但是安裝 Windows 版本的 Expect,似乎有點麻煩,所以就裝在 WSL 裡面的 Alpine, 一樣可以從 Windows 去執行。

所以概念就是這樣子:

wt.exe -M nt --title "title" wsl.exe --exec expect login.tcl 192.168.1.1 username password

但是 wt.exe 其實並不存在,直接閉著眼睛執行無妨,但 WinSCP 偏偏要去檢查它在不在,所以改這樣:

c:\windows\system32\cmd.exe /c start wt.exe ... 

將 IP、使用者名稱等,改成 WinSCP 的樣板:

c:\windows\system32\cmd.exe /c start wt.exe -M nt --title "!N" wsl --exec /usr/bin/expect /root/login.tcl "!@" "!U" "!P" "!#" "!/"

login.tcl 會因為每個人的環境和需求不同,最基本大概是這樣:

#!/usr/bin/expect -f set ip [lindex $argv 0] set user [lindex $argv 1] set password [lindex $argv 2] set port [lindex $argv 3] set dir [lindex $argv 4] set ::env(TERM) xterm set prompt "#|$|]" spawn ssh $user@$ip -p $port expect { "*yes/no" { send "yes\r"; exp_continue} "*password:" { send "$password\r" } default { puts "don't know what to do." exit } } expect -re $prompt send "cd $dir\r" interact

這種東西不能叫創作,要用就直接拿去用;如果有用到 SSH tunnel 的話,只要在 WinSCP 設定好 tunnel 即可,這邊不用額外考慮。

WinSCP 要在哪邊設定....


然後,你就可以一直開、一直開...

如果有問題,將 cmd /c 改成 cmd /k,就可以看到錯誤訊息了。





沒有留言:

張貼留言