@fredlackey/devutils 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +32 -150
  2. package/package.json +5 -82
  3. package/bin/dev.js +0 -16
  4. package/files/README.md +0 -0
  5. package/files/claude/.claude/commands/setup-context.md +0 -3
  6. package/files/monorepos/_archive/README.md +0 -36
  7. package/files/monorepos/_legacy/README.md +0 -36
  8. package/files/monorepos/ai-docs/README.md +0 -33
  9. package/files/monorepos/apps/README.md +0 -24
  10. package/files/monorepos/docs/README.md +0 -40
  11. package/files/monorepos/packages/README.md +0 -25
  12. package/files/monorepos/research/README.md +0 -29
  13. package/files/monorepos/scripts/README.md +0 -24
  14. package/src/cli.js +0 -72
  15. package/src/commands/README.md +0 -41
  16. package/src/commands/configure.js +0 -199
  17. package/src/commands/identity.js +0 -1630
  18. package/src/commands/ignore.js +0 -247
  19. package/src/commands/install.js +0 -526
  20. package/src/commands/setup.js +0 -246
  21. package/src/commands/status.js +0 -223
  22. package/src/commands/update.js +0 -142
  23. package/src/commands/version.js +0 -100
  24. package/src/completion.js +0 -284
  25. package/src/constants.js +0 -45
  26. package/src/ignore/claude-code.txt +0 -10
  27. package/src/ignore/docker.txt +0 -18
  28. package/src/ignore/linux.txt +0 -23
  29. package/src/ignore/macos.txt +0 -36
  30. package/src/ignore/node.txt +0 -55
  31. package/src/ignore/terraform.txt +0 -37
  32. package/src/ignore/vscode.txt +0 -18
  33. package/src/ignore/windows.txt +0 -35
  34. package/src/index.js +0 -0
  35. package/src/installs/README.md +0 -399
  36. package/src/installs/adobe-creative-cloud.js +0 -546
  37. package/src/installs/adobe-creative-cloud.md +0 -605
  38. package/src/installs/appcleaner.js +0 -321
  39. package/src/installs/appcleaner.md +0 -699
  40. package/src/installs/apt-transport-https.js +0 -390
  41. package/src/installs/apt-transport-https.md +0 -678
  42. package/src/installs/atomicparsley.js +0 -642
  43. package/src/installs/atomicparsley.md +0 -795
  44. package/src/installs/aws-cli.js +0 -797
  45. package/src/installs/aws-cli.md +0 -727
  46. package/src/installs/balena-etcher.js +0 -710
  47. package/src/installs/balena-etcher.md +0 -761
  48. package/src/installs/bambu-studio.js +0 -1143
  49. package/src/installs/bambu-studio.md +0 -780
  50. package/src/installs/bash-completion.js +0 -575
  51. package/src/installs/bash-completion.md +0 -833
  52. package/src/installs/bash.js +0 -417
  53. package/src/installs/bash.md +0 -993
  54. package/src/installs/beyond-compare.js +0 -603
  55. package/src/installs/beyond-compare.md +0 -813
  56. package/src/installs/brave-browser.js +0 -968
  57. package/src/installs/brave-browser.md +0 -650
  58. package/src/installs/build-essential.js +0 -529
  59. package/src/installs/build-essential.md +0 -977
  60. package/src/installs/ca-certificates.js +0 -618
  61. package/src/installs/ca-certificates.md +0 -937
  62. package/src/installs/caffeine.js +0 -508
  63. package/src/installs/caffeine.md +0 -839
  64. package/src/installs/camtasia.js +0 -596
  65. package/src/installs/camtasia.md +0 -762
  66. package/src/installs/chatgpt.js +0 -476
  67. package/src/installs/chatgpt.md +0 -814
  68. package/src/installs/chocolatey.js +0 -456
  69. package/src/installs/chocolatey.md +0 -661
  70. package/src/installs/chrome-canary.js +0 -419
  71. package/src/installs/chrome-canary.md +0 -641
  72. package/src/installs/chromium.js +0 -667
  73. package/src/installs/chromium.md +0 -838
  74. package/src/installs/claude-code.js +0 -576
  75. package/src/installs/claude-code.md +0 -1173
  76. package/src/installs/cloudflare-warp.js +0 -900
  77. package/src/installs/cloudflare-warp.md +0 -1047
  78. package/src/installs/comet-browser.js +0 -588
  79. package/src/installs/comet-browser.md +0 -731
  80. package/src/installs/curl.js +0 -379
  81. package/src/installs/curl.md +0 -714
  82. package/src/installs/cursor.js +0 -579
  83. package/src/installs/cursor.md +0 -970
  84. package/src/installs/dbeaver.js +0 -924
  85. package/src/installs/dbeaver.md +0 -939
  86. package/src/installs/dbschema.js +0 -692
  87. package/src/installs/dbschema.md +0 -925
  88. package/src/installs/dependencies.md +0 -453
  89. package/src/installs/development-tools.js +0 -600
  90. package/src/installs/development-tools.md +0 -977
  91. package/src/installs/docker.js +0 -1029
  92. package/src/installs/docker.md +0 -1109
  93. package/src/installs/drawio.js +0 -1019
  94. package/src/installs/drawio.md +0 -795
  95. package/src/installs/elmedia-player.js +0 -347
  96. package/src/installs/elmedia-player.md +0 -556
  97. package/src/installs/ffmpeg.js +0 -889
  98. package/src/installs/ffmpeg.md +0 -852
  99. package/src/installs/file.js +0 -464
  100. package/src/installs/file.md +0 -987
  101. package/src/installs/gemini-cli.js +0 -811
  102. package/src/installs/gemini-cli.md +0 -1153
  103. package/src/installs/git.js +0 -400
  104. package/src/installs/git.md +0 -907
  105. package/src/installs/gitego.js +0 -949
  106. package/src/installs/gitego.md +0 -1172
  107. package/src/installs/go.js +0 -931
  108. package/src/installs/go.md +0 -958
  109. package/src/installs/google-antigravity.js +0 -913
  110. package/src/installs/google-antigravity.md +0 -1075
  111. package/src/installs/google-chrome.js +0 -833
  112. package/src/installs/google-chrome.md +0 -862
  113. package/src/installs/gpg.js +0 -480
  114. package/src/installs/gpg.md +0 -1056
  115. package/src/installs/homebrew.js +0 -1028
  116. package/src/installs/homebrew.md +0 -988
  117. package/src/installs/imageoptim.js +0 -968
  118. package/src/installs/imageoptim.md +0 -1119
  119. package/src/installs/installers.json +0 -4032
  120. package/src/installs/installers.json.tmp +0 -3953
  121. package/src/installs/jq.js +0 -400
  122. package/src/installs/jq.md +0 -809
  123. package/src/installs/keyboard-maestro.js +0 -719
  124. package/src/installs/keyboard-maestro.md +0 -825
  125. package/src/installs/kiro.js +0 -864
  126. package/src/installs/kiro.md +0 -1015
  127. package/src/installs/latex.js +0 -789
  128. package/src/installs/latex.md +0 -1095
  129. package/src/installs/lftp.js +0 -356
  130. package/src/installs/lftp.md +0 -907
  131. package/src/installs/lsb-release.js +0 -346
  132. package/src/installs/lsb-release.md +0 -814
  133. package/src/installs/messenger.js +0 -847
  134. package/src/installs/messenger.md +0 -900
  135. package/src/installs/microsoft-office.js +0 -568
  136. package/src/installs/microsoft-office.md +0 -760
  137. package/src/installs/microsoft-teams.js +0 -801
  138. package/src/installs/microsoft-teams.md +0 -886
  139. package/src/installs/moom.js +0 -326
  140. package/src/installs/moom.md +0 -570
  141. package/src/installs/node.js +0 -904
  142. package/src/installs/node.md +0 -1153
  143. package/src/installs/nordpass.js +0 -716
  144. package/src/installs/nordpass.md +0 -921
  145. package/src/installs/nordvpn.js +0 -892
  146. package/src/installs/nordvpn.md +0 -1052
  147. package/src/installs/nvm.js +0 -995
  148. package/src/installs/nvm.md +0 -1057
  149. package/src/installs/ohmyzsh.js +0 -529
  150. package/src/installs/ohmyzsh.md +0 -1094
  151. package/src/installs/openssh.js +0 -804
  152. package/src/installs/openssh.md +0 -1056
  153. package/src/installs/pandoc.js +0 -662
  154. package/src/installs/pandoc.md +0 -1036
  155. package/src/installs/parallels-desktop.js +0 -431
  156. package/src/installs/parallels-desktop.md +0 -446
  157. package/src/installs/pinentry.js +0 -510
  158. package/src/installs/pinentry.md +0 -1142
  159. package/src/installs/pngyu.js +0 -869
  160. package/src/installs/pngyu.md +0 -896
  161. package/src/installs/postman.js +0 -799
  162. package/src/installs/postman.md +0 -940
  163. package/src/installs/procps.js +0 -425
  164. package/src/installs/procps.md +0 -851
  165. package/src/installs/safari-tech-preview.js +0 -374
  166. package/src/installs/safari-tech-preview.md +0 -533
  167. package/src/installs/sfnt2woff.js +0 -658
  168. package/src/installs/sfnt2woff.md +0 -795
  169. package/src/installs/shellcheck.js +0 -481
  170. package/src/installs/shellcheck.md +0 -1005
  171. package/src/installs/slack.js +0 -741
  172. package/src/installs/slack.md +0 -865
  173. package/src/installs/snagit.js +0 -585
  174. package/src/installs/snagit.md +0 -844
  175. package/src/installs/software-properties-common.js +0 -372
  176. package/src/installs/software-properties-common.md +0 -805
  177. package/src/installs/spotify.js +0 -877
  178. package/src/installs/spotify.md +0 -901
  179. package/src/installs/studio-3t.js +0 -823
  180. package/src/installs/studio-3t.md +0 -918
  181. package/src/installs/sublime-text.js +0 -804
  182. package/src/installs/sublime-text.md +0 -914
  183. package/src/installs/superwhisper.js +0 -706
  184. package/src/installs/superwhisper.md +0 -630
  185. package/src/installs/tailscale.js +0 -745
  186. package/src/installs/tailscale.md +0 -1100
  187. package/src/installs/tar.js +0 -389
  188. package/src/installs/tar.md +0 -946
  189. package/src/installs/termius.js +0 -798
  190. package/src/installs/termius.md +0 -844
  191. package/src/installs/terraform.js +0 -779
  192. package/src/installs/terraform.md +0 -899
  193. package/src/installs/tfenv.js +0 -778
  194. package/src/installs/tfenv.md +0 -1091
  195. package/src/installs/tidal.js +0 -771
  196. package/src/installs/tidal.md +0 -864
  197. package/src/installs/tmux.js +0 -346
  198. package/src/installs/tmux.md +0 -1030
  199. package/src/installs/tree.js +0 -411
  200. package/src/installs/tree.md +0 -833
  201. package/src/installs/unzip.js +0 -460
  202. package/src/installs/unzip.md +0 -879
  203. package/src/installs/vim.js +0 -421
  204. package/src/installs/vim.md +0 -1040
  205. package/src/installs/vlc.js +0 -821
  206. package/src/installs/vlc.md +0 -927
  207. package/src/installs/vscode.js +0 -843
  208. package/src/installs/vscode.md +0 -1002
  209. package/src/installs/wget.js +0 -420
  210. package/src/installs/wget.md +0 -791
  211. package/src/installs/whatsapp.js +0 -729
  212. package/src/installs/whatsapp.md +0 -854
  213. package/src/installs/winpty.js +0 -352
  214. package/src/installs/winpty.md +0 -620
  215. package/src/installs/woff2.js +0 -553
  216. package/src/installs/woff2.md +0 -977
  217. package/src/installs/wsl.js +0 -572
  218. package/src/installs/wsl.md +0 -699
  219. package/src/installs/xcode-clt.js +0 -520
  220. package/src/installs/xcode-clt.md +0 -351
  221. package/src/installs/xcode.js +0 -560
  222. package/src/installs/xcode.md +0 -573
  223. package/src/installs/yarn.js +0 -824
  224. package/src/installs/yarn.md +0 -1074
  225. package/src/installs/yq.js +0 -654
  226. package/src/installs/yq.md +0 -944
  227. package/src/installs/yt-dlp.js +0 -701
  228. package/src/installs/yt-dlp.md +0 -946
  229. package/src/installs/yum-utils.js +0 -297
  230. package/src/installs/yum-utils.md +0 -648
  231. package/src/installs/zoom.js +0 -759
  232. package/src/installs/zoom.md +0 -884
  233. package/src/installs/zsh.js +0 -455
  234. package/src/installs/zsh.md +0 -1008
  235. package/src/scripts/README.md +0 -617
  236. package/src/scripts/STATUS.md +0 -208
  237. package/src/scripts/afk.js +0 -411
  238. package/src/scripts/backup-all.js +0 -746
  239. package/src/scripts/backup-source.js +0 -727
  240. package/src/scripts/brewd.js +0 -389
  241. package/src/scripts/brewi.js +0 -520
  242. package/src/scripts/brewr.js +0 -527
  243. package/src/scripts/brews.js +0 -477
  244. package/src/scripts/brewu.js +0 -504
  245. package/src/scripts/c.js +0 -201
  246. package/src/scripts/ccurl.js +0 -341
  247. package/src/scripts/certbot-crontab-init.js +0 -504
  248. package/src/scripts/certbot-init.js +0 -657
  249. package/src/scripts/ch.js +0 -355
  250. package/src/scripts/claude-danger.js +0 -268
  251. package/src/scripts/clean-dev.js +0 -435
  252. package/src/scripts/clear-dns-cache.js +0 -541
  253. package/src/scripts/clone.js +0 -435
  254. package/src/scripts/code-all.js +0 -437
  255. package/src/scripts/count-files.js +0 -211
  256. package/src/scripts/count-folders.js +0 -211
  257. package/src/scripts/count.js +0 -264
  258. package/src/scripts/d.js +0 -219
  259. package/src/scripts/datauri.js +0 -389
  260. package/src/scripts/delete-files.js +0 -380
  261. package/src/scripts/docker-clean.js +0 -426
  262. package/src/scripts/dp.js +0 -442
  263. package/src/scripts/e.js +0 -390
  264. package/src/scripts/empty-trash.js +0 -513
  265. package/src/scripts/evm.js +0 -444
  266. package/src/scripts/fetch-github-repos.js +0 -456
  267. package/src/scripts/get-channel.js +0 -345
  268. package/src/scripts/get-course.js +0 -399
  269. package/src/scripts/get-dependencies.js +0 -306
  270. package/src/scripts/get-folder.js +0 -799
  271. package/src/scripts/get-tunes.js +0 -426
  272. package/src/scripts/get-video.js +0 -367
  273. package/src/scripts/git-backup.js +0 -577
  274. package/src/scripts/git-clone.js +0 -493
  275. package/src/scripts/git-pup.js +0 -319
  276. package/src/scripts/git-push.js +0 -396
  277. package/src/scripts/h.js +0 -622
  278. package/src/scripts/hide-desktop-icons.js +0 -499
  279. package/src/scripts/hide-hidden-files.js +0 -538
  280. package/src/scripts/install-dependencies-from.js +0 -456
  281. package/src/scripts/ips.js +0 -663
  282. package/src/scripts/iso.js +0 -370
  283. package/src/scripts/killni.js +0 -577
  284. package/src/scripts/ll.js +0 -467
  285. package/src/scripts/local-ip.js +0 -325
  286. package/src/scripts/m.js +0 -524
  287. package/src/scripts/map.js +0 -309
  288. package/src/scripts/mkd.js +0 -351
  289. package/src/scripts/ncu-update-all.js +0 -457
  290. package/src/scripts/nginx-init.js +0 -718
  291. package/src/scripts/npmi.js +0 -382
  292. package/src/scripts/o.js +0 -511
  293. package/src/scripts/org-by-date.js +0 -338
  294. package/src/scripts/p.js +0 -224
  295. package/src/scripts/packages.js +0 -330
  296. package/src/scripts/path.js +0 -225
  297. package/src/scripts/ports.js +0 -597
  298. package/src/scripts/q.js +0 -305
  299. package/src/scripts/refresh-files.js +0 -394
  300. package/src/scripts/remove-smaller-files.js +0 -516
  301. package/src/scripts/rename-files-with-date.js +0 -533
  302. package/src/scripts/resize-image.js +0 -539
  303. package/src/scripts/rm-safe.js +0 -669
  304. package/src/scripts/s.js +0 -540
  305. package/src/scripts/set-git-public.js +0 -365
  306. package/src/scripts/show-desktop-icons.js +0 -475
  307. package/src/scripts/show-hidden-files.js +0 -472
  308. package/src/scripts/tpa.js +0 -280
  309. package/src/scripts/tpo.js +0 -280
  310. package/src/scripts/u.js +0 -505
  311. package/src/scripts/vpush.js +0 -437
  312. package/src/scripts/y.js +0 -283
  313. package/src/utils/README.md +0 -95
  314. package/src/utils/common/apps.js +0 -143
  315. package/src/utils/common/display.js +0 -157
  316. package/src/utils/common/network.js +0 -185
  317. package/src/utils/common/os.js +0 -294
  318. package/src/utils/common/package-manager.js +0 -301
  319. package/src/utils/common/privileges.js +0 -138
  320. package/src/utils/common/shell.js +0 -261
  321. package/src/utils/macos/apps.js +0 -228
  322. package/src/utils/macos/brew.js +0 -315
  323. package/src/utils/ubuntu/apt.js +0 -307
  324. package/src/utils/ubuntu/desktop.js +0 -292
  325. package/src/utils/ubuntu/snap.js +0 -344
  326. package/src/utils/ubuntu/systemd.js +0 -286
  327. package/src/utils/windows/choco.js +0 -465
  328. package/src/utils/windows/env.js +0 -246
  329. package/src/utils/windows/registry.js +0 -269
  330. package/src/utils/windows/shell.js +0 -240
  331. package/src/utils/windows/winget.js +0 -489
@@ -1,1056 +0,0 @@
1
- # Installing OpenSSH
2
-
3
- ## Overview
4
-
5
- OpenSSH (Open Secure Shell) is the premier suite of secure networking utilities based on the Secure Shell (SSH) protocol. Originally developed by the OpenBSD project, OpenSSH provides encrypted communication over unsecured networks, replacing insecure protocols like telnet, rlogin, and rsh.
6
-
7
- OpenSSH includes:
8
-
9
- - **ssh** - The SSH client for connecting to remote servers
10
- - **sshd** - The SSH server daemon that accepts incoming connections
11
- - **ssh-keygen** - Tool for generating SSH key pairs
12
- - **ssh-agent** - Authentication agent for managing private keys
13
- - **ssh-add** - Adds private keys to the authentication agent
14
- - **scp** - Secure file copy utility
15
- - **sftp** - Secure file transfer program
16
- - **ssh-copy-id** - Tool for installing public keys on remote servers
17
-
18
- This guide documents OpenSSH installation procedures for all platforms supported by DevUtils CLI.
19
-
20
- ## Dependencies
21
-
22
- ### macOS (Homebrew)
23
-
24
- - **Required:** None (macOS includes system OpenSSH)
25
- - **Optional:**
26
- - `homebrew` - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` or `dev install homebrew` (provides newer version with FIDO2 support)
27
- - **Auto-installed:**
28
- - Xcode Command Line Tools (installed by Homebrew if not present)
29
-
30
- ### Ubuntu (APT/Snap)
31
-
32
- - **Required:**
33
- - `sudo` - Pre-installed on Ubuntu desktop/server
34
- - APT package manager - Pre-installed on all Ubuntu systems
35
- - **Optional:** None
36
- - **Auto-installed:**
37
- - systemd - Pre-installed on Ubuntu 15.04+ (used for SSH service management)
38
-
39
- ### Raspberry Pi OS (APT/Snap)
40
-
41
- - **Required:**
42
- - `sudo` - Pre-installed on Raspberry Pi OS
43
- - APT package manager - Pre-installed on all Raspberry Pi OS installations
44
- - **Optional:** None
45
- - **Auto-installed:**
46
- - systemd - Pre-installed on Raspberry Pi OS Jessie+ (used for SSH service management)
47
-
48
- ### Amazon Linux (DNF/YUM)
49
-
50
- - **Required:**
51
- - `sudo` - Pre-installed on Amazon Linux
52
- - DNF (Amazon Linux 2023) or YUM (Amazon Linux 2) - Pre-installed based on version
53
- - **Optional:** None
54
- - **Auto-installed:**
55
- - systemd - Pre-installed on Amazon Linux 2+ (used for SSH service management)
56
-
57
- ### Windows (Chocolatey/winget)
58
-
59
- - **Required:**
60
- - PowerShell 5.1+ - Pre-installed on Windows 10/11
61
- - Administrator privileges - Required for Windows Capability installation
62
- - Windows Update access - Required for downloading OpenSSH components
63
- - **Optional:** None
64
- - **Auto-installed:**
65
- - Windows Firewall rules for SSH server (created automatically when server is installed)
66
-
67
- ### Git Bash (Manual/Portable)
68
-
69
- - **Required:**
70
- - Git for Windows - Install via `choco install git` or download from https://git-scm.com/download/win (OpenSSH is bundled)
71
- - **Optional:**
72
- - Windows OpenSSH - Install via `dev install openssh` from PowerShell (allows using native Windows SSH instead of bundled version)
73
- - **Auto-installed:** None
74
-
75
- ## Prerequisites
76
-
77
- Before installing OpenSSH on any platform, ensure:
78
-
79
- 1. **Internet connectivity** - Required to download OpenSSH packages
80
- 2. **Administrative privileges** - Required for system-wide installation (especially for the server component)
81
- 3. **Terminal access** - Required to run installation commands
82
-
83
- ## Platform-Specific Installation
84
-
85
- ### macOS (Homebrew)
86
-
87
- #### Prerequisites
88
-
89
- - macOS 10.15 (Catalina) or later (macOS 14 Sonoma or later recommended)
90
- - Homebrew package manager installed
91
- - Command line access via Terminal.app or iTerm2
92
-
93
- macOS includes a pre-installed version of OpenSSH. However, Apple's bundled version may be older than the latest release. Homebrew provides a more recent version with additional features like FIDO2/U2F hardware key support.
94
-
95
- If Homebrew is not installed, install it first:
96
-
97
- ```bash
98
- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
99
- ```
100
-
101
- #### Installation Steps
102
-
103
- Run the following command to install OpenSSH:
104
-
105
- ```bash
106
- brew install --quiet openssh
107
- ```
108
-
109
- The `--quiet` flag suppresses non-essential output, making the installation suitable for automation and scripts.
110
-
111
- After installation, the Homebrew version of OpenSSH will be available. The macOS system SSH remains intact at `/usr/bin/ssh`.
112
-
113
- **Note**: To use the Homebrew version by default, ensure Homebrew's bin directory is first in your PATH. Add the following to your `~/.zshrc`:
114
-
115
- For Apple Silicon Macs:
116
- ```bash
117
- export PATH="/opt/homebrew/bin:$PATH"
118
- ```
119
-
120
- For Intel Macs:
121
- ```bash
122
- export PATH="/usr/local/bin:$PATH"
123
- ```
124
-
125
- #### Verification
126
-
127
- Confirm the installation succeeded:
128
-
129
- ```bash
130
- ssh -V
131
- ```
132
-
133
- Expected output (version numbers may vary):
134
-
135
- ```
136
- OpenSSH_10.2p1, OpenSSL 3.6.0 10 Jun 2025
137
- ```
138
-
139
- Verify you are using the Homebrew version:
140
-
141
- ```bash
142
- which ssh
143
- ```
144
-
145
- Expected output for Apple Silicon Macs:
146
-
147
- ```
148
- /opt/homebrew/bin/ssh
149
- ```
150
-
151
- Expected output for Intel Macs:
152
-
153
- ```
154
- /usr/local/bin/ssh
155
- ```
156
-
157
- #### Troubleshooting
158
-
159
- **Problem**: `ssh -V` shows the older macOS version
160
-
161
- **Solution**: The system version of SSH is being used instead of Homebrew's version. Ensure Homebrew's bin directory is in your PATH before `/usr/bin`:
162
-
163
- ```bash
164
- echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
165
- source ~/.zshrc
166
- ```
167
-
168
- For Intel Macs, use `/usr/local/bin` instead of `/opt/homebrew/bin`.
169
-
170
- **Problem**: `brew: command not found`
171
-
172
- **Solution**: Homebrew is not installed or not in PATH. Install Homebrew first:
173
-
174
- ```bash
175
- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
176
- ```
177
-
178
- **Problem**: Permission errors during installation
179
-
180
- **Solution**: Homebrew should not require sudo. If you encounter permission errors, fix Homebrew permissions:
181
-
182
- ```bash
183
- sudo chown -R $(whoami) /opt/homebrew
184
- ```
185
-
186
- ---
187
-
188
- ### Ubuntu/Debian (APT)
189
-
190
- #### Prerequisites
191
-
192
- - Ubuntu 20.04 LTS or later, or Debian 11 (Bullseye) or later
193
- - sudo privileges
194
- - Internet connectivity
195
-
196
- Ubuntu and Debian include OpenSSH in their default repositories. The SSH client is typically pre-installed on desktop systems, but the server component requires manual installation.
197
-
198
- #### Installation Steps
199
-
200
- **Step 1: Install OpenSSH client and server**
201
-
202
- ```bash
203
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
204
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-client openssh-server
205
- ```
206
-
207
- The `DEBIAN_FRONTEND=noninteractive` environment variable ensures no interactive prompts appear during installation, making this suitable for scripts and automation.
208
-
209
- **Step 2: Enable and start the SSH service**
210
-
211
- ```bash
212
- sudo systemctl enable ssh --now
213
- ```
214
-
215
- The `--now` flag enables the service for automatic startup and starts it immediately.
216
-
217
- **Step 3: Configure firewall (if enabled)**
218
-
219
- If UFW (Uncomplicated Firewall) is active, allow SSH connections:
220
-
221
- ```bash
222
- sudo ufw allow ssh
223
- ```
224
-
225
- #### Verification
226
-
227
- Confirm the installation succeeded:
228
-
229
- ```bash
230
- ssh -V
231
- ```
232
-
233
- Expected output (version numbers may vary):
234
-
235
- ```
236
- OpenSSH_9.6p1 Ubuntu-3ubuntu13, OpenSSL 3.0.13 30 Jan 2024
237
- ```
238
-
239
- Verify the SSH service is running:
240
-
241
- ```bash
242
- sudo systemctl status ssh
243
- ```
244
-
245
- Expected output includes `Active: active (running)`.
246
-
247
- Test local SSH connection (optional):
248
-
249
- ```bash
250
- ssh localhost
251
- ```
252
-
253
- This will prompt for your password and connect to your own machine, confirming the server is working.
254
-
255
- #### Troubleshooting
256
-
257
- **Problem**: `E: Unable to locate package openssh-server`
258
-
259
- **Solution**: Update your package lists:
260
-
261
- ```bash
262
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
263
- ```
264
-
265
- **Problem**: SSH service fails to start
266
-
267
- **Solution**: Check the service status and logs:
268
-
269
- ```bash
270
- sudo systemctl status ssh
271
- sudo journalctl -xeu ssh
272
- ```
273
-
274
- Common causes include port 22 already in use or missing host keys. Regenerate host keys if needed:
275
-
276
- ```bash
277
- sudo rm /etc/ssh/ssh_host_*
278
- sudo dpkg-reconfigure openssh-server
279
- ```
280
-
281
- **Problem**: Connection refused when connecting remotely
282
-
283
- **Solution**: Verify the firewall allows SSH:
284
-
285
- ```bash
286
- sudo ufw status
287
- sudo ufw allow ssh
288
- ```
289
-
290
- **Problem**: Ubuntu 24.04+ shows ssh.service as inactive
291
-
292
- **Solution**: Ubuntu 24.04 and later use socket-based activation. The service appears inactive until the first connection. This is expected behavior. The socket should be active:
293
-
294
- ```bash
295
- sudo systemctl status ssh.socket
296
- ```
297
-
298
- ---
299
-
300
- ### Raspberry Pi OS (APT)
301
-
302
- #### Prerequisites
303
-
304
- - Raspberry Pi OS (Bookworm or Bullseye recommended)
305
- - Raspberry Pi 3B+ or later (any model supported by Raspberry Pi OS)
306
- - sudo privileges
307
- - Internet connectivity
308
-
309
- Raspberry Pi OS is based on Debian, so OpenSSH installation follows the Debian/APT method. OpenSSH works on both 32-bit (armhf) and 64-bit (arm64) architectures.
310
-
311
- **Note**: SSH is disabled by default on Raspberry Pi OS for security reasons. This guide covers enabling it via the command line.
312
-
313
- #### Installation Steps
314
-
315
- First, verify your architecture:
316
-
317
- ```bash
318
- uname -m
319
- ```
320
-
321
- - `aarch64` = 64-bit ARM
322
- - `armv7l` = 32-bit ARM
323
-
324
- **Step 1: Install OpenSSH client and server**
325
-
326
- ```bash
327
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
328
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-client openssh-server
329
- ```
330
-
331
- **Step 2: Enable and start the SSH service**
332
-
333
- ```bash
334
- sudo systemctl enable ssh --now
335
- ```
336
-
337
- **Alternative method for headless setup**: Create an empty file named `ssh` on the boot partition of the SD card before first boot:
338
-
339
- ```bash
340
- # On the SD card boot partition (from another computer)
341
- touch /Volumes/boot/ssh # macOS
342
- # OR
343
- touch /media/$USER/boot/ssh # Linux
344
- ```
345
-
346
- This enables SSH on first boot without requiring keyboard/monitor access.
347
-
348
- #### Verification
349
-
350
- Confirm the installation succeeded:
351
-
352
- ```bash
353
- ssh -V
354
- ```
355
-
356
- Expected output (version numbers may vary):
357
-
358
- ```
359
- OpenSSH_9.2p1 Debian-2+deb12u3, OpenSSL 3.0.14 4 Jun 2024
360
- ```
361
-
362
- Verify the SSH service is running:
363
-
364
- ```bash
365
- sudo systemctl status ssh
366
- ```
367
-
368
- Test SSH is accessible from another machine:
369
-
370
- ```bash
371
- # From another computer on the same network
372
- ssh pi@<raspberry-pi-ip-address>
373
- ```
374
-
375
- Find your Raspberry Pi's IP address:
376
-
377
- ```bash
378
- hostname -I
379
- ```
380
-
381
- #### Troubleshooting
382
-
383
- **Problem**: SSH connection refused
384
-
385
- **Solution**: Verify the SSH service is enabled and running:
386
-
387
- ```bash
388
- sudo systemctl enable ssh --now
389
- sudo systemctl status ssh
390
- ```
391
-
392
- **Problem**: Host key verification failed after reinstalling OS
393
-
394
- **Solution**: Remove the old host key from your local machine:
395
-
396
- ```bash
397
- ssh-keygen -R <raspberry-pi-ip-address>
398
- ```
399
-
400
- **Problem**: SSH service fails with host key errors
401
-
402
- **Solution**: Regenerate host keys:
403
-
404
- ```bash
405
- sudo rm /etc/ssh/ssh_host_*
406
- sudo dpkg-reconfigure openssh-server
407
- ```
408
-
409
- **Problem**: Cannot connect on first boot
410
-
411
- **Solution**: Ensure the `ssh` file exists on the boot partition. On newer Raspberry Pi OS versions, you may also need to create a `userconf.txt` file with username and password hash.
412
-
413
- ---
414
-
415
- ### Amazon Linux (DNF/YUM)
416
-
417
- #### Prerequisites
418
-
419
- - Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
420
- - sudo privileges
421
- - EC2 instance or compatible environment
422
-
423
- Amazon Linux 2023 uses DNF as the default package manager. Amazon Linux 2 uses YUM. OpenSSH is typically pre-installed on Amazon Linux, but you may need to update it or install the server component.
424
-
425
- **Note**: Amazon Linux EC2 instances come with SSH enabled by default (it is how you access the instance). The commands below ensure the latest version is installed.
426
-
427
- #### Installation Steps
428
-
429
- **For Amazon Linux 2023 (AL2023):**
430
-
431
- ```bash
432
- sudo dnf install -y openssh-server openssh-clients
433
- sudo systemctl enable sshd --now
434
- ```
435
-
436
- **For Amazon Linux 2 (AL2):**
437
-
438
- ```bash
439
- sudo yum install -y openssh-server openssh-clients
440
- sudo systemctl enable sshd --now
441
- ```
442
-
443
- The `-y` flag automatically confirms installation, enabling non-interactive execution.
444
-
445
- **Note**: On Amazon Linux, the SSH service is named `sshd`, not `ssh`.
446
-
447
- #### Verification
448
-
449
- Confirm the installation succeeded:
450
-
451
- ```bash
452
- ssh -V
453
- ```
454
-
455
- Expected output for AL2023 (version numbers may vary):
456
-
457
- ```
458
- OpenSSH_8.7p1, OpenSSL 3.0.8 7 Feb 2023
459
- ```
460
-
461
- Verify the SSH service is running:
462
-
463
- ```bash
464
- sudo systemctl status sshd
465
- ```
466
-
467
- Check OpenSSH is listening on port 22:
468
-
469
- ```bash
470
- sudo ss -tlnp | grep :22
471
- ```
472
-
473
- #### Troubleshooting
474
-
475
- **Problem**: `No match for argument: openssh-server` on Amazon Linux 2
476
-
477
- **Solution**: Update the yum cache and retry:
478
-
479
- ```bash
480
- sudo yum makecache
481
- sudo yum install -y openssh-server openssh-clients
482
- ```
483
-
484
- **Problem**: Cannot connect to EC2 instance
485
-
486
- **Solution**: Verify the EC2 security group allows inbound SSH (port 22) from your IP address. Check in the AWS Console under EC2 > Security Groups.
487
-
488
- **Problem**: Host key changed warning after instance replacement
489
-
490
- **Solution**: Amazon Linux instances generate new host keys on first boot. Remove the old key from your known_hosts:
491
-
492
- ```bash
493
- ssh-keygen -R <instance-ip-or-hostname>
494
- ```
495
-
496
- **Problem**: SSH version is older than expected
497
-
498
- **Solution**: Amazon's repositories prioritize stability. AL2023 includes OpenSSH 8.7. The `ssh-rsa` key exchange algorithm is disabled by default in OpenSSH 8.7+. Use Ed25519 keys for compatibility.
499
-
500
- ---
501
-
502
- ### Windows (PowerShell / winget)
503
-
504
- #### Prerequisites
505
-
506
- - Windows 10 version 1809 or later, or Windows 11
507
- - Windows Server 2019 or later
508
- - Administrator PowerShell
509
- - Internet connectivity
510
-
511
- Windows 10 (1809+) and Windows 11 include OpenSSH as an optional feature. Windows Server 2025 has OpenSSH installed by default.
512
-
513
- #### Installation Steps
514
-
515
- Open PowerShell as Administrator (right-click PowerShell and select "Run as administrator").
516
-
517
- **Step 1: Install OpenSSH Client**
518
-
519
- ```powershell
520
- Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
521
- ```
522
-
523
- **Step 2: Install OpenSSH Server (optional)**
524
-
525
- Install only if you need to accept incoming SSH connections:
526
-
527
- ```powershell
528
- Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
529
- ```
530
-
531
- **Step 3: Start and configure the SSH server (if installed)**
532
-
533
- ```powershell
534
- Start-Service sshd
535
- Set-Service -Name sshd -StartupType 'Automatic'
536
- ```
537
-
538
- **Step 4: Configure firewall rule for SSH server (if installed)**
539
-
540
- ```powershell
541
- if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) {
542
- New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
543
- }
544
- ```
545
-
546
- **Alternative: Using winget**
547
-
548
- For the latest beta/preview version with additional features:
549
-
550
- ```powershell
551
- winget install Microsoft.OpenSSH.Beta --silent --accept-source-agreements --accept-package-agreements
552
- ```
553
-
554
- #### Verification
555
-
556
- Confirm the OpenSSH Client installation:
557
-
558
- ```powershell
559
- ssh -V
560
- ```
561
-
562
- Expected output (version numbers may vary):
563
-
564
- ```
565
- OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2
566
- ```
567
-
568
- Check the OpenSSH Server status (if installed):
569
-
570
- ```powershell
571
- Get-Service sshd
572
- ```
573
-
574
- Expected output includes `Status: Running`.
575
-
576
- Verify the installation status:
577
-
578
- ```powershell
579
- Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
580
- ```
581
-
582
- Expected output shows `State: Installed` for installed components.
583
-
584
- #### Troubleshooting
585
-
586
- **Problem**: `Add-WindowsCapability` fails with error
587
-
588
- **Solution**: Windows Update must be accessible. This command downloads components from Windows Update. Verify internet connectivity and that Windows Update is not disabled.
589
-
590
- **Problem**: SSH server fails to start
591
-
592
- **Solution**: Check the event log for errors:
593
-
594
- ```powershell
595
- Get-EventLog -LogName Application -Source sshd -Newest 10
596
- ```
597
-
598
- Regenerate host keys if corrupted:
599
-
600
- ```powershell
601
- cd $env:ProgramData\ssh
602
- Remove-Item ssh_host_* -Force
603
- ssh-keygen -A
604
- Start-Service sshd
605
- ```
606
-
607
- **Problem**: Firewall blocking SSH connections
608
-
609
- **Solution**: Verify the firewall rule exists and is enabled:
610
-
611
- ```powershell
612
- Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP"
613
- ```
614
-
615
- **Problem**: `ssh` command not found after installation
616
-
617
- **Solution**: Close and reopen PowerShell to refresh the PATH. If still not working, verify installation:
618
-
619
- ```powershell
620
- Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'
621
- ```
622
-
623
- ---
624
-
625
- ### WSL (Ubuntu)
626
-
627
- #### Prerequisites
628
-
629
- - Windows 10 version 2004 or higher, or Windows 11
630
- - WSL 2 enabled with Ubuntu distribution installed
631
- - sudo privileges within WSL
632
-
633
- WSL runs Ubuntu (or another Linux distribution) within Windows. The SSH client is typically pre-installed. The SSH server requires additional configuration for external access.
634
-
635
- **Important**: WSL SSH server is separate from Windows SSH server. They can run simultaneously on different ports.
636
-
637
- #### Installation Steps
638
-
639
- Open your WSL Ubuntu terminal and run:
640
-
641
- **Step 1: Install OpenSSH client and server**
642
-
643
- ```bash
644
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
645
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-client openssh-server
646
- ```
647
-
648
- **Step 2: Configure SSH for WSL (if running SSH server)**
649
-
650
- Edit the SSH configuration to use a different port (to avoid conflict with Windows SSH):
651
-
652
- ```bash
653
- sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
654
- sudo sed -i 's/#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/' /etc/ssh/sshd_config
655
- ```
656
-
657
- **Step 3: Start the SSH service**
658
-
659
- WSL does not use systemd by default, so start SSH manually:
660
-
661
- ```bash
662
- sudo service ssh start
663
- ```
664
-
665
- To start SSH automatically when WSL launches, add to your `~/.bashrc`:
666
-
667
- ```bash
668
- echo 'if [ -z "$(pgrep -x sshd)" ]; then sudo service ssh start > /dev/null 2>&1; fi' >> ~/.bashrc
669
- ```
670
-
671
- Configure passwordless sudo for the ssh service (optional):
672
-
673
- ```bash
674
- echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/service ssh *" | sudo tee /etc/sudoers.d/ssh-service
675
- ```
676
-
677
- **Step 4: Configure Windows firewall for external access (optional)**
678
-
679
- From an Administrator PowerShell on Windows:
680
-
681
- ```powershell
682
- New-NetFirewallRule -Name sshd-wsl -DisplayName 'OpenSSH Server (sshd) for WSL' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222
683
- ```
684
-
685
- #### Verification
686
-
687
- Confirm the installation succeeded:
688
-
689
- ```bash
690
- ssh -V
691
- ```
692
-
693
- Expected output (version numbers may vary):
694
-
695
- ```
696
- OpenSSH_9.6p1 Ubuntu-3ubuntu13, OpenSSL 3.0.13 30 Jan 2024
697
- ```
698
-
699
- Verify the SSH service is running (if server installed):
700
-
701
- ```bash
702
- sudo service ssh status
703
- ```
704
-
705
- Test local connection:
706
-
707
- ```bash
708
- ssh -p 2222 localhost
709
- ```
710
-
711
- #### Troubleshooting
712
-
713
- **Problem**: SSH service fails to start with dependency error
714
-
715
- **Solution**: Disable the ssh.socket if it conflicts:
716
-
717
- ```bash
718
- sudo systemctl disable ssh.socket
719
- sudo service ssh restart
720
- ```
721
-
722
- **Problem**: Cannot connect to WSL from external machine
723
-
724
- **Solution**: WSL 2 uses a virtual network. Port forwarding is required:
725
-
726
- ```powershell
727
- # Run in Administrator PowerShell on Windows
728
- netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=2222 connectaddress=$(wsl hostname -I | ForEach-Object { $_.Trim() })
729
- ```
730
-
731
- **Problem**: WSL IP address changes on restart
732
-
733
- **Solution**: WSL 2 assigns a new IP on each restart. Update port forwarding rules accordingly or use a script to automate this.
734
-
735
- **Problem**: `service ssh start` requires password every time
736
-
737
- **Solution**: Add the sudoers rule documented above to enable passwordless sudo for the ssh service.
738
-
739
- ---
740
-
741
- ### Git Bash (Bundled OpenSSH)
742
-
743
- #### Prerequisites
744
-
745
- - Windows 10 or Windows 11 (64-bit or ARM64)
746
- - Git for Windows installed
747
- - No additional installation required
748
-
749
- Git Bash includes a bundled version of OpenSSH. When you install Git for Windows, OpenSSH client tools (ssh, ssh-keygen, ssh-agent, scp, sftp) are automatically included.
750
-
751
- **Note**: Git Bash provides only the SSH client, not the SSH server. For SSH server functionality on Windows, use the Windows OpenSSH Server (see Windows section).
752
-
753
- #### Installation Steps
754
-
755
- Git Bash automatically includes OpenSSH when Git for Windows is installed:
756
-
757
- ```powershell
758
- choco install git -y
759
- ```
760
-
761
- After installation, close and reopen your terminal. Open Git Bash from the Start Menu.
762
-
763
- **Using Windows OpenSSH instead of bundled version (optional)**:
764
-
765
- During Git for Windows installation, you can choose to use an external OpenSSH client. If you prefer the Windows-native OpenSSH:
766
-
767
- 1. Install OpenSSH on Windows (see Windows section above)
768
- 2. Configure Git to use the Windows SSH:
769
-
770
- ```bash
771
- git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
772
- ```
773
-
774
- #### Verification
775
-
776
- Open Git Bash and run:
777
-
778
- ```bash
779
- ssh -V
780
- ```
781
-
782
- Expected output (version numbers may vary):
783
-
784
- ```
785
- OpenSSH_9.6p1, OpenSSL 3.2.1 30 Jan 2024
786
- ```
787
-
788
- Verify ssh-agent is available:
789
-
790
- ```bash
791
- eval $(ssh-agent -s)
792
- ```
793
-
794
- Expected output:
795
-
796
- ```
797
- Agent pid 12345
798
- ```
799
-
800
- Test SSH key generation:
801
-
802
- ```bash
803
- ssh-keygen -t ed25519 -C "test@example.com" -f /tmp/test_key -N ""
804
- ls -la /tmp/test_key*
805
- rm /tmp/test_key*
806
- ```
807
-
808
- #### Troubleshooting
809
-
810
- **Problem**: SSH commands are slow or hang
811
-
812
- **Solution**: Git Bash's SSH may conflict with Windows OpenSSH. Use one consistently:
813
-
814
- ```bash
815
- # Check which ssh is being used
816
- which ssh
817
- ```
818
-
819
- If `/usr/bin/ssh` (Git Bash bundled), ensure ssh-agent is running properly.
820
-
821
- **Problem**: Permission denied (publickey) errors
822
-
823
- **Solution**: Ensure your SSH key is added to the agent:
824
-
825
- ```bash
826
- eval $(ssh-agent -s)
827
- ssh-add ~/.ssh/id_ed25519
828
- ```
829
-
830
- **Problem**: SSH agent not persisting between sessions
831
-
832
- **Solution**: Add to your `~/.bashrc`:
833
-
834
- ```bash
835
- env=~/.ssh/agent.env
836
-
837
- agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
838
-
839
- agent_start () {
840
- (umask 077; ssh-agent >| "$env")
841
- . "$env" >| /dev/null ; }
842
-
843
- agent_load_env
844
-
845
- agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
846
-
847
- if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
848
- agent_start
849
- ssh-add
850
- elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
851
- ssh-add
852
- fi
853
-
854
- unset env
855
- ```
856
-
857
- **Problem**: `the input device is not a TTY` error with interactive SSH
858
-
859
- **Solution**: Use `winpty` prefix for interactive commands:
860
-
861
- ```bash
862
- winpty ssh user@host
863
- ```
864
-
865
- Or add an alias to `~/.bashrc`:
866
-
867
- ```bash
868
- alias ssh="winpty ssh"
869
- ```
870
-
871
- ---
872
-
873
- ## Post-Installation Configuration
874
-
875
- After installing OpenSSH on any platform, consider these common configurations.
876
-
877
- ### Generate SSH Key Pair
878
-
879
- Create an Ed25519 key (recommended for modern systems):
880
-
881
- ```bash
882
- ssh-keygen -t ed25519 -C "your.email@example.com"
883
- ```
884
-
885
- For legacy systems requiring RSA:
886
-
887
- ```bash
888
- ssh-keygen -t rsa -b 4096 -C "your.email@example.com"
889
- ```
890
-
891
- ### Add Key to SSH Agent
892
-
893
- Start the SSH agent and add your key:
894
-
895
- ```bash
896
- eval "$(ssh-agent -s)"
897
- ssh-add ~/.ssh/id_ed25519
898
- ```
899
-
900
- ### Copy Public Key to Remote Server
901
-
902
- ```bash
903
- ssh-copy-id user@remote-host
904
- ```
905
-
906
- On Windows (where ssh-copy-id is not available):
907
-
908
- ```powershell
909
- type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@remote-host "cat >> .ssh/authorized_keys"
910
- ```
911
-
912
- ### Configure SSH Client
913
-
914
- Create or edit `~/.ssh/config` to define connection shortcuts:
915
-
916
- ```
917
- Host myserver
918
- HostName server.example.com
919
- User username
920
- IdentityFile ~/.ssh/id_ed25519
921
- Port 22
922
-
923
- Host github.com
924
- HostName github.com
925
- User git
926
- IdentityFile ~/.ssh/id_ed25519_github
927
- ```
928
-
929
- Usage:
930
-
931
- ```bash
932
- ssh myserver # Connects to server.example.com as username
933
- ```
934
-
935
- ### Secure SSH Server Configuration
936
-
937
- On systems running an SSH server, edit `/etc/ssh/sshd_config`:
938
-
939
- ```bash
940
- # Disable root login
941
- PermitRootLogin no
942
-
943
- # Disable password authentication (key-only)
944
- PasswordAuthentication no
945
-
946
- # Use only SSH protocol 2
947
- Protocol 2
948
- ```
949
-
950
- Restart SSH after changes:
951
-
952
- ```bash
953
- # Linux
954
- sudo systemctl restart sshd
955
-
956
- # Windows (PowerShell)
957
- Restart-Service sshd
958
- ```
959
-
960
- ---
961
-
962
- ## Common Issues
963
-
964
- ### Issue: Connection Timed Out
965
-
966
- **Symptoms**: `ssh: connect to host example.com port 22: Connection timed out`
967
-
968
- **Solutions**:
969
-
970
- - Verify the remote host is reachable: `ping example.com`
971
- - Check if SSH server is running on the remote host
972
- - Verify firewall allows port 22 (or custom SSH port)
973
- - Check security groups (cloud environments)
974
-
975
- ### Issue: Permission Denied (publickey)
976
-
977
- **Symptoms**: `Permission denied (publickey)`
978
-
979
- **Solutions**:
980
-
981
- - Ensure your public key is on the server: `cat ~/.ssh/authorized_keys`
982
- - Verify correct permissions:
983
-
984
- ```bash
985
- chmod 700 ~/.ssh
986
- chmod 600 ~/.ssh/authorized_keys
987
- chmod 600 ~/.ssh/id_ed25519
988
- chmod 644 ~/.ssh/id_ed25519.pub
989
- ```
990
-
991
- - Ensure ssh-agent has your key: `ssh-add -l`
992
-
993
- ### Issue: Host Key Verification Failed
994
-
995
- **Symptoms**: `WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!`
996
-
997
- **Solutions**:
998
-
999
- If the host was legitimately reinstalled or changed:
1000
-
1001
- ```bash
1002
- ssh-keygen -R hostname
1003
- ```
1004
-
1005
- If unexpected, this could indicate a man-in-the-middle attack. Verify with the system administrator.
1006
-
1007
- ### Issue: Too Many Authentication Failures
1008
-
1009
- **Symptoms**: `Received disconnect from host: Too many authentication failures`
1010
-
1011
- **Solutions**:
1012
-
1013
- Limit which keys SSH tries:
1014
-
1015
- ```bash
1016
- ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@host
1017
- ```
1018
-
1019
- Or configure in `~/.ssh/config`:
1020
-
1021
- ```
1022
- Host example.com
1023
- IdentitiesOnly yes
1024
- IdentityFile ~/.ssh/specific_key
1025
- ```
1026
-
1027
- ### Issue: SSH Slow to Connect
1028
-
1029
- **Symptoms**: SSH connection takes 10+ seconds to establish
1030
-
1031
- **Solutions**:
1032
-
1033
- - Disable DNS lookup on server (edit `/etc/ssh/sshd_config`):
1034
- ```
1035
- UseDNS no
1036
- ```
1037
-
1038
- - Disable GSSAPI authentication:
1039
- ```bash
1040
- ssh -o GSSAPIAuthentication=no user@host
1041
- ```
1042
-
1043
- ---
1044
-
1045
- ## References
1046
-
1047
- - [OpenSSH Official Website](https://www.openssh.com/)
1048
- - [OpenSSH Manual Pages](https://man.openbsd.org/ssh)
1049
- - [Homebrew OpenSSH Formula](https://formulae.brew.sh/formula/openssh)
1050
- - [Ubuntu OpenSSH Server Documentation](https://documentation.ubuntu.com/server/how-to/security/openssh-server/)
1051
- - [Microsoft Learn: OpenSSH for Windows](https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse)
1052
- - [Git for Windows SSH](https://gitforwindows.org/using-an-external-openssh-client.html)
1053
- - [Raspberry Pi SSH Documentation](https://www.raspberrypi.org/documentation/remote-access/ssh/)
1054
- - [Amazon Linux 2023 User Guide](https://docs.aws.amazon.com/linux/al2023/ug/)
1055
- - [Chocolatey OpenSSH Package](https://community.chocolatey.org/packages/openssh)
1056
- - [WSL OpenSSH Guide](https://learn.microsoft.com/en-us/windows/wsl/tutorials/ssh)