本文是Putty 免密自动登录设置这篇文章的补充。
附加需求有两个,即使用指定密钥登录而不是密码登录,以及设置代理。
批量转换密钥格式
常见的OpenSSH密钥并不能被putty识别,需要通过puttygen.exe
进行转换。
但是该程序只支持图形界面,不支持命令行,量多的时候可能有点麻烦。
这时候需要用到winscp.com
,该程序请自行搜索。
这里再贴一个示例代码,批量生成ed25519的密钥(OpenSSH + Putty两种格式):
@echo off
set Path=D:\Program Files\OpenSSL-Win64\bin\;%Path%
set Path=D:\Program Files\putty\WinSCP-6.3.7-Portable\;%Path%
setlocal enabledelayedexpansion
for %%i in (t1 t2 t3) do (
mkdir %%i
cd %%i
ssh-keygen -t ed25519 -f id_ed25519 -P "" -C "%%i@test.com"
winscp.com /keygen id_ed25519 /output=id_ed25519.ppk
cd ..
)
endlocal
pause
指定密钥登录 + 设置代理
可以在Putty设置好,保存成指定配置名,使用时通过命令行-load "配置名"
来加载。
当然,密钥也可以通过-i "密钥路径"
覆盖。
@echo off
putty.exe -load "test" -ssh -l {用户名} -P {端口} {地址} -i "D:\Path\to\private\key\id_rsa.ppk"
REM start putty.exe -load "test"
pause
批量生成Putty配置
人工在Putty界面设置好,再保存配置可能效率有点低。
若有需要,可以通过修改注册表的方式提高效率。
若不符合预期,可以与人工保存生成的注册表配置进行对比观察。
@echo off
setlocal
REM 定义会话名称
set "sessionName=test"
REM 定义注册表路径
set "registryPath=HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\%sessionName%"
REM 操作举例
reg add "%registryPath%" /v ProxyType /t REG_DWORD /d 0 /f
reg add "%registryPath%" /v ProxyUsername /t REG_SZ /d "%proxy_username%" /f
reg delete "%registryPath%" /v ProxyHost /f 2>nul
echo 代理已关闭。