一、WinSCP
linux 与 windows 间传递文件。可以与 putty 配合使用。
官网提供便携版下载:https://winscp.net/eng/downloads.php
支持中文,语言包:https://winscp.net/eng/translations.php
设置 putty 路径
免登录启动 putty
二、Putty
跨平台 Telnet/SSH 客户端
官方下载:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
镜像:https://mirrors.huaweicloud.com/putty/latest.html
Windows 上使用官方版,配置和连接记录都在注册表中,且为英文,不是很方便。
便携中文版:https://github.com/larryli/PuTTY/releases
快捷登录(记住密码)
先保存会话
使用快捷方式
putty.exe -load "136" -ssh -l "root" -pw "000000"
修改主题
https://github.com/AlexAkulov/putty-color-themes
找到配置修改即可

Colour0\255,255,255\ Colour1\255,255,255\ Colour2\51,51,51\ Colour3\85,85,85\ Colour4\0,0,0\ Colour5\0,255,0\ Colour6\77,77,77\ Colour7\85,85,85\ Colour8\187,0,0\ Colour9\255,85,85\ Colour10\152,251,152\ Colour11\85,255,85\ Colour12\240,230,140\ Colour13\255,255,85\ Colour14\205,133,63\ Colour15\135,206,235\ Colour16\255,222,173\ Colour17\255,85,255\ Colour18\255,160,160\ Colour19\255,215,0\ Colour20\245,222,179\ Colour21\255,255,255\
三、MobaXterm
整合了上面两个软件,且多了一些其他功能,如远程桌面等。
https://mobaxterm.mobatek.net/download-home-edition.html
key(MobaXterm-Keygen.py):https://github.com/DoubleLabyrinth/MobaXterm-keygen

#/usr/bin/env python3 ''' Author: Double Sine License: GPLv3 ''' import os, sys, zipfile VariantBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' VariantBase64Dict = { i : VariantBase64Table[i] for i in range(len(VariantBase64Table)) } VariantBase64ReverseDict = { VariantBase64Table[i] : i for i in range(len(VariantBase64Table)) } def VariantBase64Encode(bs : bytes): result = b'' blocks_count, left_bytes = divmod(len(bs), 3) for i in range(blocks_count): coding_int = int.from_bytes(bs[3 * i:3 * i + 3], 'little') block = VariantBase64Dict[coding_int & 0x3f] block += VariantBase64Dict[(coding_int >> 6) & 0x3f] block += VariantBase64Dict[(coding_int >> 12) & 0x3f] block += VariantBase64Dict[(coding_int >> 18) & 0x3f] result += block.encode() if left_bytes == 0: return result elif left_bytes == 1: coding_int = int.from_bytes(bs[3 * blocks_count:], 'little') block = VariantBase64Dict[coding_int & 0x3f] block += VariantBase64Dict[(coding_int >> 6) & 0x3f] result += block.encode() return result else: coding_int = int.from_bytes(bs[3 * blocks_count:], 'little') block = VariantBase64Dict[coding_int & 0x3f] block += VariantBase64Dict[(coding_int >> 6) & 0x3f] block += VariantBase64Dict[(coding_int >> 12) & 0x3f] result += block.encode() return result def VariantBase64Decode(s : str): result = b'' blocks_count, left_bytes = divmod(len(s), 4) for i in range(blocks_count): block = VariantBase64ReverseDict[s[4 * i]] block += VariantBase64ReverseDict[s[4 * i + 1]] << 6 block += VariantBase64ReverseDict[s[4 * i + 2]] << 12 block += VariantBase64ReverseDict[s[4 * i + 3]] << 18 result += block.to_bytes(3, 'little') if left_bytes == 0: return result elif left_bytes == 2: block = VariantBase64ReverseDict[s[4 * blocks_count]] block += VariantBase64ReverseDict[s[4 * blocks_count + 1]] << 6 result += block.to_bytes(1, 'little') return result elif left_bytes == 3: block = VariantBase64ReverseDict[s[4 * blocks_count]] block += VariantBase64ReverseDict[s[4 * blocks_count + 1]] << 6 block += VariantBase64ReverseDict[s[4 * blocks_count + 2]] << 12 result += block.to_bytes(2, 'little') return result else: raise ValueError('Invalid encoding.') def EncryptBytes(key : int, bs : bytes): result = bytearray() for i in range(len(bs)): result.append(bs[i] ^ ((key >> 8) & 0xff)) key = result[-1] & key | 0x482D return bytes(result) def DecryptBytes(key : int, bs : bytes): result = bytearray() for i in range(len(bs)): result.append(bs[i] ^ ((key >> 8) & 0xff)) key = bs[i] & key | 0x482D return bytes(result) class LicenseType: Professional = 1 Educational = 3 Persional = 4 def GenerateLicense(Type : LicenseType, Count : int, UserName : str, MajorVersion : int, MinorVersion): assert(Count >= 0) LicenseString = '%d#%s|%d%d#%d#%d3%d6%d#%d#%d#%d#' % (Type, UserName, MajorVersion, MinorVersion, Count, MajorVersion, MinorVersion, MinorVersion, 0, # Unknown 0, # No Games flag. 0 means "NoGames = false". But it does not work. 0) # No Plugins flag. 0 means "NoPlugins = false". But it does not work. EncodedLicenseString = VariantBase64Encode(EncryptBytes(0x787, LicenseString.encode())).decode() with zipfile.ZipFile('Custom.mxtpro', 'w') as f: f.writestr('Pro.key', data = EncodedLicenseString) def help(): print('Usage:') print(' MobaXterm-Keygen.py <UserName> <Version>') print() print(' <UserName>: The Name licensed to') print(' <Version>: The Version of MobaXterm') print(' Example: 10.9') print() if __name__ == '__main__': if len(sys.argv) != 3: help() exit(0) else: MajorVersion, MinorVersion = sys.argv[2].split('.')[0:2] MajorVersion = int(MajorVersion) MinorVersion = int(MinorVersion) GenerateLicense(LicenseType.Professional, 1, sys.argv[1], MajorVersion, MinorVersion) print('[*] Success!') print('[*] File generated: %s' % os.path.join(os.getcwd(), 'Custom.mxtpro')) print('[*] Please move or copy the newly-generated file to MobaXterm\'s installation path.') print() else: print('[*] ERROR: Please run this script directly')
https://www.52pojie.cn/thread-812140-1-1.html
MobaXterm-Keygen.py <UserName> <Version> <UserName> 授权用户名,随便填 <Version> MobaXterm 的版本号,例如"10.9"或者"11.0" 例如:MobaXterm-Keygen.py "DoubleSine" 10.9 然后复制 Custom.mxtpro 到 MobaXterm 安装目录 生成 Custom.mxtpro 是一个 zip 文件,包含一个文本文件 Pro.key,其中有一个密钥字符串 MobaXterm 还有一个 Customizer 模式可以用:MobaXterm.exe -customizer I don't know how to make custom settings take effect in Customizer mode directly. The only way I found is that you should export custom settings to a file named MobaXterm customization.custom which is also a zip file. Then merge two zip file: Custom.mxtpro and MobaXterm customization.custom to Custom.mxtpro. Finally copy newly-generated Custom.mxtpro to MobaXterm's installation path.