liximomo / vscode-sftp

Super fast sftp/ftp extension for VS Code
MIT License
1.51k stars 267 forks source link

Changing remote server in config causes sftp to fail. #411

Closed gwesthoven closed 5 years ago

gwesthoven commented 5 years ago

Do you read the FAQ?

Describe the bug When the sftp.json is update to sync to a different remote server, the sftp fails. Uninstalling and reinstalling the extension gets around it.

To Reproduce Steps to reproduce the behavior:

  1. Set up sftp.json to sftp to a server on save.
  2. Save a file
  3. Change sftp.json so sftp to a different server on save.
  4. [error] Error: Config Not Found

Expected behavior Expected behavior is that when changing server location, upload on save will sftp to new location.

Desktop (please complete the following information):

Extension Logs - required Output on vscode start: [warn] ENOENT: no such file or directory, open 'C:\Users\username.ssh\config' load C:\Users\username.ssh\config failed

[trace] run command 'Sync Local To Remote' [error] Error: Config Not Found. (file:///c:/Code/GitMaster/lib_saas) at Object.u [as handleCtxFromUri] (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:44285) at Object. (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:4043) at Generator.next () at C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3323 at new Promise () at r (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3100) at a.map.t (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3985) at Array.map () at Object. (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3978) at Generator.next () at s (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3156) at

liximomo commented 5 years ago

Please provide the full logs.

gwesthoven commented 5 years ago

Not sure if this will be helpful. I've tried uninstalling and reinstalling the extension, and it just doens't seem to work at all. Hopefully this tells you something.

[debug] register command "Cancel All Transfer" from "./commandCancelAllTransfer.ts" [debug] register command "Config" from "./commandConfig.ts" [debug] register command "List Active Folder" from "./commandListActiveFolder.ts" [debug] register command "Open Ssh Connection" from "./commandOpenSshConnection.ts" [debug] register command "Set Profile" from "./commandSetProfile.ts" [debug] register command "Toggle Output Panel" from "./commandToggleOutputPanel.ts" [debug] register command "Delete Remote" from "./fileCommandDeleteRemote.ts" [debug] register command "Diff" from "./fileCommandDiff.ts" [debug] register command "Diff Active File" from "./fileCommandDiffActiveFile.ts" [debug] register command "Download" from "./fileCommandDownload.ts" [debug] register command "Download Active File" from "./fileCommandDownloadActiveFile.ts" [debug] register command "Download Active Folder" from "./fileCommandDownloadActiveFolder.ts" [debug] register command "Download File" from "./fileCommandDownloadFile.ts" [debug] register command "Download Folder" from "./fileCommandDownloadFolder.ts" [debug] register command "Download Force" from "./fileCommandDownloadForce.ts" [debug] register command "Download Project" from "./fileCommandDownloadProject.ts" [debug] register command "Edit In Local" from "./fileCommandEditInLocal.ts" [debug] register command "List" from "./fileCommandList.ts" [debug] register command "List All" from "./fileCommandListAll.ts" [debug] register command "Reveal In Explorer" from "./fileCommandRevealInExplorer.ts" [debug] register command "Reveal In Remote Explorer" from "./fileCommandRevealInRemoteExplorer.ts" [debug] register command "Sync Both Directions" from "./fileCommandSyncBothDirections.ts" [debug] register command "Sync Local To Remote" from "./fileCommandSyncLocalToRemote.ts" [debug] register command "Sync Remote To Local" from "./fileCommandSyncRemoteToLocal.ts" [debug] register command "Upload" from "./fileCommandUpload.ts" [debug] register command "Upload Active File" from "./fileCommandUploadActiveFile.ts" [debug] register command "Upload Active Folder" from "./fileCommandUploadActiveFolder.ts" [debug] register command "Upload Changed File" from "./fileCommandUploadChangedFile.ts" [debug] register command "Upload File" from "./fileCommandUploadFile.ts" [debug] register command "Upload Folder" from "./fileCommandUploadFolder.ts" [debug] register command "Upload Force" from "./fileCommandUploadForce.ts" [debug] register command "Upload Project" from "./fileCommandUploadProject.ts" [warn] ENOENT: no such file or directory, open 'C:\Users\username.ssh\config' load C:\Users\username.ssh\config failed [warn] ENOENT: no such file or directory, open 'C:\Users\username.ssh\config' load C:\Users\username.ssh\config failed [warn] ENOENT: no such file or directory, open 'C:\Users\username.ssh\config' load C:\Users\username.ssh\config failed [warn] ENOENT: no such file or directory, open 'C:\Users\username.ssh\config' load C:\Users\username.ssh\config failed [warn] ENOENT: no such file or directory, open 'C:\Users\username.ssh\config' load C:\Users\username.ssh\config failed [warn] ENOENT: no such file or directory, open 'C:\Users\username.ssh\config' load C:\Users\username.ssh\config failed [info] config at \Code\GitMaster\v4_Saas {"remotePath":"/data/dealertire/webfiles/tmcp","uploadOnSave":true,"downloadOnOpen":false,"ignore":["\.sublime-(project|workspace)","sftp-config(-alt\d?)?\.json","sftp-settings\.json","/venv/","\.svn/","\.hg/","\.git/","\.bzr","_darcs","CVS","\.DS_Store","Thumbs\.db","desktop\.ini"],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"passive":false,"remoteTimeOffsetInHours":0,"port":2222,"name":"v4_Saas","host":"127.0.0.1","username":"**","password":"**","context":"/Code/GitMaster/v4_Saas"} [info] config at \Code\GitMaster\cfbatch-canada {"remotePath":"/data/dealertire/webfiles/batch","uploadOnSave":true,"downloadOnOpen":false,"ignore":["\.sublime-(project|workspace)","sftp-config(-alt\d?)?\.json","sftp-settings\.json","/venv/","\.svn/","\.hg/","\.git/","\.bzr","_darcs","CVS","\.DS_Store","Thumbs\.db","desktop\.ini"],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"passive":false,"remoteTimeOffsetInHours":0,"port":2722,"name":"cfbatch-canada","host":"127.0.0.1","username":"**","password":"**","context":"/Code/GitMaster/cfbatch-canada"} [info] config at \Code\GitMaster\lib_saas {"remotePath":"/data/dealertire/webfiles/lib","uploadOnSave":true,"downloadOnOpen":false,"ignore":["/venv/","\.svn/","\.hg/","\.git/","\.bzr","_darcs","CVS","\.DS_Store","Thumbs\.db","desktop\.ini"],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"passive":false,"remoteTimeOffsetInHours":0,"port":2222,"name":"lib_saas","context":"/Code/GitMaster/lib_saas","host":"127.0.0.1","username":"**","password":"**"} [info] config at \Code\GitMaster\cfbatch {"remotePath":"/data/dealertire/webfiles/china/cfbatch","uploadOnSave":true,"downloadOnOpen":false,"ignore":["\.sublime-(project|workspace)","sftp-config(-alt\d?)?\.json","sftp-settings\.json","/venv/","\.svn/","\.hg/","\.git/","\.bzr","_darcs","CVS","\.DS_Store","Thumbs\.db","desktop\.ini"],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"passive":false,"remoteTimeOffsetInHours":0,"port":2722,"name":"cfbatch-china","host":"127.0.0.1","username":"**","password":"**","context":"/Code/GitMaster/cfbatch"} [info] config at \Code\GitMaster\b2c {"remotePath":"/data/dealertire/webfiles/b2c","uploadOnSave":true,"downloadOnOpen":false,"ignore":["\.sublime-(project|workspace)","sftp-config(-alt\d?)?\.json","sftp-settings\.json","/venv/","\.svn/","\.hg/","\.git/","\.bzr","_darcs","CVS","\.DS_Store","Thumbs\.db","desktop\.ini"],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"passive":false,"remoteTimeOffsetInHours":0,"port":22,"name":"b2c-saas","host":"10.20.1.123","username":"**","password":"**","context":"/Code/GitMaster/b2c"} [info] config at \Code\GitMaster\v5_China {"remotePath":"/data/dealertire/webfiles/v5/","uploadOnSave":true,"downloadOnOpen":false,"ignore":["\.sublime-(project|workspace)","sftp-config(-alt\d?)?\.json","sftp-settings\.json","/venv/","\.svn/","\.hg/","\.git/","\.bzr","_darcs","CVS","\.DS_Store","Thumbs\.db","desktop\.ini"],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"passive":false,"remoteTimeOffsetInHours":0,"port":22,"name":"b2b-china","host":"devb2bweb10","username":"**","password":"**","context":"/Code/GitMaster/v5_China"} [trace] run command 'Sync Local To Remote' [error] Error: Config Not Found. (file:///c:/Code/GitMaster/lib_saas) at Object.u [as handleCtxFromUri] (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:44285) at Object. (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:4043) at Generator.next () at C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3323 at new Promise () at r (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3100) at a.map.t (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3985) at Array.map () at Object. (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3978) at Generator.next () at s (C:\Users\username.vscode\extensions\liximomo.sftp-1.7.7\dist\extension.js:1:3156) at

liximomo commented 5 years ago

@ndheathen Please include drive letter in you "context" in Windows.

gwesthoven commented 5 years ago

Ok, that seems to fix it. Must be something related to the latest update of vscode. I'll close.

surpass007 commented 5 years ago

[10-19 18:58:29] [debug] register command "Cancel All Transfer" from "./commandCancelAllTransfer.ts" [10-19 18:58:29] [debug] register command "Config" from "./commandConfig.ts" [10-19 18:58:29] [debug] register command "List Active Folder" from "./commandListActiveFolder.ts" [10-19 18:58:29] [debug] register command "Open Ssh Connection" from "./commandOpenSshConnection.ts" [10-19 18:58:29] [debug] register command "Set Profile" from "./commandSetProfile.ts" [10-19 18:58:29] [debug] register command "Toggle Output Panel" from "./commandToggleOutputPanel.ts" [10-19 18:58:29] [debug] register command "Upload Changed Files" from "./commandUploadChangedFiles.ts" [10-19 18:58:29] [debug] register command "Delete Remote" from "./fileCommandDeleteRemote.ts" [10-19 18:58:29] [debug] register command "Diff" from "./fileCommandDiff.ts" [10-19 18:58:29] [debug] register command "Diff Active File" from "./fileCommandDiffActiveFile.ts" [10-19 18:58:29] [debug] register command "Download" from "./fileCommandDownload.ts" [10-19 18:58:29] [debug] register command "Download Active File" from "./fileCommandDownloadActiveFile.ts" [10-19 18:58:29] [debug] register command "Download Active Folder" from "./fileCommandDownloadActiveFolder.ts" [10-19 18:58:29] [debug] register command "Download File" from "./fileCommandDownloadFile.ts" [10-19 18:58:29] [debug] register command "Download Folder" from "./fileCommandDownloadFolder.ts" [10-19 18:58:29] [debug] register command "Download Force" from "./fileCommandDownloadForce.ts" [10-19 18:58:29] [debug] register command "Download Project" from "./fileCommandDownloadProject.ts" [10-19 18:58:29] [debug] register command "Edit In Local" from "./fileCommandEditInLocal.ts" [10-19 18:58:29] [debug] register command "List" from "./fileCommandList.ts" [10-19 18:58:29] [debug] register command "List All" from "./fileCommandListAll.ts" [10-19 18:58:29] [debug] register command "Reveal In Explorer" from "./fileCommandRevealInExplorer.ts" [10-19 18:58:29] [debug] register command "Reveal In Remote Explorer" from "./fileCommandRevealInRemoteExplorer.ts" [10-19 18:58:29] [debug] register command "Sync Both Directions" from "./fileCommandSyncBothDirections.ts" [10-19 18:58:29] [debug] register command "Sync Local To Remote" from "./fileCommandSyncLocalToRemote.ts" [10-19 18:58:29] [debug] register command "Sync Remote To Local" from "./fileCommandSyncRemoteToLocal.ts" [10-19 18:58:29] [debug] register command "Upload" from "./fileCommandUpload.ts" [10-19 18:58:29] [debug] register command "Upload Active File" from "./fileCommandUploadActiveFile.ts" [10-19 18:58:29] [debug] register command "Upload Active Folder" from "./fileCommandUploadActiveFolder.ts" [10-19 18:58:29] [debug] register command "Upload File" from "./fileCommandUploadFile.ts" [10-19 18:58:29] [debug] register command "Upload Folder" from "./fileCommandUploadFolder.ts" [10-19 18:58:29] [debug] register command "Upload Force" from "./fileCommandUploadForce.ts" [10-19 18:58:29] [debug] register command "Upload Project" from "./fileCommandUploadProject.ts" [10-19 18:58:29] [info] config at d:\WorkSpace\bigo_code\live_imserver {"remotePath":"/data/liuqi/live_imserver","uploadOnSave":false,"downloadOnOpen":false,"ignore":[],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"remoteTimeOffsetInHours":0,"name":"My Server","host":"172.24.25.37","port":10020,"username":"**","passphrase":"**","privateKeyPath":"C:/Users/Deep Blue/Desktop/id_rsa"} [10-19 18:58:30] [warn] ENOENT: no such file or directory, open 'C:\Users\Deep Blue.ssh\config' load C:\Users\Deep Blue.ssh\config failed [10-19 18:58:56] [trace] run command 'Upload File' [10-19 18:58:56] [trace] handle upload file for d:\WorkSpace\bigo_code\live_imserver\imserver\protocol\common\protocol\PImLbs.h [10-19 18:58:56] [debug] Local ident: 'SSH-2.0-ssh2js0.4.5' [10-19 18:58:56] [debug] Client: Trying 172.24.25.37 on port 10020 ... [10-19 18:58:56] [debug] Client: Connected [10-19 18:58:56] [debug] Remote ident: 'SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4' [10-19 18:58:56] [debug] Outgoing: Writing KEXINIT [10-19 18:58:56] [debug] DEBUG: Comparing KEXINITs ... [10-19 18:58:56] [debug] (local) KEX algorithms: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 [10-19 18:58:56] [debug] (remote) KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 [10-19 18:58:56] [debug] KEX algorithm: ecdh-sha2-nistp256 [10-19 18:58:56] [debug] (local) Host key formats: ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 [10-19 18:58:56] [debug] (remote) Host key formats: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256 [10-19 18:58:56] [debug] Host key format: ssh-rsa [10-19 18:58:56] [debug] (local) Client->Server ciphers: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm,aes128-gcm@openssh.com,aes256-gcm,aes256-gcm@openssh.com [10-19 18:58:56] [debug] (remote) Client->Server ciphers: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com [10-19 18:58:56] [debug] Client->Server Cipher: aes128-ctr [10-19 18:58:56] [debug] (local) Server->Client ciphers: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm,aes128-gcm@openssh.com,aes256-gcm,aes256-gcm@openssh.com [10-19 18:58:56] [debug] (remote) Server->Client ciphers: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com [10-19 18:58:56] [debug] Server->Client Cipher: aes128-ctr [10-19 18:58:56] [debug] (local) Client->Server HMAC algorithms: hmac-sha2-256,hmac-sha2-512,hmac-sha1 [10-19 18:58:56] [debug] (remote) Client->Server HMAC algorithms: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 [10-19 18:58:56] [debug] Client->Server HMAC algorithm: hmac-sha2-256 [10-19 18:58:56] [debug] (local) Server->Client HMAC algorithms: hmac-sha2-256,hmac-sha2-512,hmac-sha1 [10-19 18:58:56] [debug] (remote) Server->Client HMAC algorithms: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 [10-19 18:58:56] [debug] Server->Client HMAC algorithm: hmac-sha2-256 [10-19 18:58:56] [debug] (local) Client->Server compression algorithms: none,zlib@openssh.com,zlib [10-19 18:58:56] [debug] (remote) Client->Server compression algorithms: none,zlib@openssh.com [10-19 18:58:56] [debug] Client->Server compression algorithm: none [10-19 18:58:56] [debug] (local) Server->Client compression algorithms: none,zlib@openssh.com,zlib [10-19 18:58:56] [debug] (remote) Server->Client compression algorithms: none,zlib@openssh.com [10-19 18:58:56] [debug] Server->Client compression algorithm: none [10-19 18:58:56] [debug] Outgoing: Writing KEXECDH_INIT [10-19 18:58:56] [debug] DEBUG: Checking host key format [10-19 18:58:56] [debug] DEBUG: Checking signature format [10-19 18:58:56] [debug] DEBUG: Verifying host fingerprint [10-19 18:58:56] [debug] DEBUG: Host accepted by default (no verification) [10-19 18:58:56] [debug] DEBUG: Verifying signature [10-19 18:58:56] [debug] Outgoing: Writing NEWKEYS [10-19 18:58:56] [debug] Outgoing: Writing SERVICE_REQUEST (ssh-userauth) [10-19 18:58:56] [debug] Outgoing: Writing USERAUTH_REQUEST (none) [10-19 18:58:56] [debug] Client: none auth failed [10-19 18:58:56] [debug] Outgoing: Writing USERAUTH_REQUEST (publickey -- check) [10-19 18:58:56] [debug] Outgoing: Writing USERAUTH_REQUEST (publickey) [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_OPEN (0, session) [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_REQUEST (0, subsystem: sftp) [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing MKDIR [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing LSTAT [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing OPEN [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing FSTAT [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing FSETSTAT [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing WRITE [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [debug] Outgoing: Writing CLOSE [10-19 18:58:56] [debug] Outgoing: Writing CHANNEL_DATA (0) [10-19 18:58:56] [error] Error: Failure at SFTPStream._transform (c:\Users\Deep Blue.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\sftp.js:412:27) at SFTPStream.Transform._read (_stream_transform.js:190:10) at SFTPStream._read (c:\Users\Deep Blue.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\sftp.js:183:15) at SFTPStream.Transform._write (_stream_transform.js:178:12) at doWrite (_stream_writable.js:410:12) at writeOrBuffer (_stream_writable.js:394:5) at SFTPStream.Writable.write (_stream_writable.js:294:11) at Channel.ondata (_stream_readable.js:666:20) at Channel.emit (events.js:182:13) at addChunk (_stream_readable.js:283:12) at readableAddChunk (_stream_readable.js:264:11) at Channel.Readable.push (_stream_readable.js:219:10) at SSH2Stream. (c:\Users\Deep Blue.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2\lib\Channel.js:167:15) at SSH2Stream.emit (events.js:182:13) at parsePacket (c:\Users\Deep Blue.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\ssh.js:3288:10) at SSH2Stream._transform (c:\Users\Deep Blue.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\ssh.js:694:13) at SSH2Stream.Transform._read (_stream_transform.js:190:10) at SSH2Stream._read (c:\Users\Deep Blue.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\ssh.js:253:15) at SSH2Stream.Transform._write (_stream_transform.js:178:12) at doWrite (_stream_writable.js:410:12) at writeOrBuffer (_stream_writable.js:394:5) at SSH2Stream.Writable.write (_stream_writable.js:294:11) at Socket.ondata (_stream_readable.js:666:20) at Socket.emit (events.js:182:13) at addChunk (_stream_readable.js:283:12) at readableAddChunk (_stream_readable.js:264:11) at Socket.Readable.push (_stream_readable.js:219:10) at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17) when local ➞ remote d:\WorkSpace\bigo_code\live_imserver\imserver\protocol\common\protocol\PImLbs.h [10-19 18:59:26] [debug] Outgoing: Writing ping (GLOBAL_REQUEST: keepalive@openssh.com)