autossh 失败,退出状态为 1,没有错误消息

Posted

技术标签:

【中文标题】autossh 失败,退出状态为 1,没有错误消息【英文标题】:autossh fails with exit status 1 and no error message 【发布时间】:2017-05-07 21:42:01 【问题描述】:

我正在尝试运行 autossh(在运行 CentOS6 的 VM 上),但它会立即退出并显示帮助消息。我认为这是一个系统问题,因为当我在另一台计算机(运行 Ubuntu 14.04)上使用完全相同的参数运行它时,它工作正常。当我运行相同的命令但使用 ssh 而不是 autossh 时也可以。所以我尝试了 strace 看看那里是否有什么问题。但如果有,我不确定它是什么。有什么想法吗?

这是 autossh 命令:autossh -oStrictHostKeyChecking=no -oServerAliveInterval=15 -oServerAliveCountMax=4 -L 3130:localhost:3130 -N -i /path/to/some.pem user@remotehost

这是 strace 输出(注意 myserver.ssh/config 中的一个条目,包含与上一个命令相同的参数):

execve("/usr/local/bin/autossh", ["autossh", "myserver"], [/* 55 vars */]) = 0
brk(0)                                  = 0xefc000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26193cc000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, st_mode=S_IFREG|0644, st_size=36751, ...) = 0
mmap(NULL, 36751, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f26193c3000
close(3)                                = 0
open("/lib64/libnsl.so.1", O_RDONLY)    = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p@\0\0\0\0\0\0"..., 832) = 832
fstat(3, st_mode=S_IFREG|0755, st_size=113432, ...) = 0
mmap(NULL, 2198192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2618f95000
mprotect(0x7f2618fab000, 2093056, PROT_NONE) = 0
mmap(0x7f26191aa000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x7f26191aa000
mmap(0x7f26191ac000, 6832, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f26191ac000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY)      = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\356\1\0\0\0\0\0"..., 832) = 832
fstat(3, st_mode=S_IFREG|0755, st_size=1920936, ...) = 0
mmap(NULL, 3750152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2618c01000
mprotect(0x7f2618d8b000, 2097152, PROT_NONE) = 0
mmap(0x7f2618f8b000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18a000) = 0x7f2618f8b000
mmap(0x7f2618f90000, 18696, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2618f90000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26193c2000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26193c1000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26193c0000
arch_prctl(ARCH_SET_FS, 0x7f26193c1700) = 0
mprotect(0x7f2618f8b000, 16384, PROT_READ) = 0
mprotect(0x7f26191aa000, 4096, PROT_READ) = 0
mprotect(0x7f26193cd000, 4096, PROT_READ) = 0
munmap(0x7f26193c3000, 36751)           = 0
write(2, "usage: autossh [-V] [-M monitor_"..., 69usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS]
) = 69
write(2, "\n", 1
)                       = 1
write(2, "    -M specifies monitor port. M"..., 238    -M specifies monitor port. May be overridden by environment
       variable AUTOSSH_PORT. 0 turns monitoring loop off.
       Alternatively, a port for an echo service on the remote
       machine may be specified. (Normally port 7.)
) = 238
write(2, "    -f run in background (autoss"..., 85    -f run in background (autossh handles this, and does not
       pass it to ssh.)
) = 85
write(2, "    -V print autossh version and"..., 39    -V print autossh version and exit.
) = 39
write(2, "\n", 1
)                       = 1
write(2, "Environment variables are:\n", 27Environment variables are:
) = 27
write(2, "    AUTOSSH_GATETIME    - how lo"..., 259    AUTOSSH_GATETIME    - how long must an ssh session be established
                          before we decide it really was established
                          (in seconds). Default is 30 seconds; use of -f
                          flag sets this to 0.
) = 259
write(2, "    AUTOSSH_LOGFILE     - file t"..., 107    AUTOSSH_LOGFILE     - file to log to (default is to use the syslog
                          facility)
) = 107
write(2, "    AUTOSSH_LOGLEVEL    - level "..., 49    AUTOSSH_LOGLEVEL    - level of log verbosity
) = 49
write(2, "    AUTOSSH_MAXLIFETIME - set th"..., 65    AUTOSSH_MAXLIFETIME - set the maximum time to live (seconds)
) = 65
write(2, "    AUTOSSH_MAXSTART    - max ti"..., 69    AUTOSSH_MAXSTART    - max times to restart (default is no limit)
) = 69
write(2, "    AUTOSSH_MESSAGE     - messag"..., 74    AUTOSSH_MESSAGE     - message to append to echo string (max 64 bytes)
) = 74
write(2, "    AUTOSSH_PATH        - path t"..., 53    AUTOSSH_PATH        - path to ssh if not default
) = 53
write(2, "    AUTOSSH_PIDFILE     - write "..., 49    AUTOSSH_PIDFILE     - write pid to this file
) = 49
write(2, "    AUTOSSH_POLL        - how of"..., 70    AUTOSSH_POLL        - how often to check the connection (seconds)
) = 70
write(2, "    AUTOSSH_FIRST_POLL  - time b"..., 71    AUTOSSH_FIRST_POLL  - time before first connection check (seconds)
) = 71
write(2, "    AUTOSSH_PORT        - port t"..., 61    AUTOSSH_PORT        - port to use for monitor connection
) = 61
write(2, "    AUTOSSH_DEBUG       - turn l"..., 104    AUTOSSH_DEBUG       - turn logging to maximum verbosity and log to
                          stderr
) = 104
write(2, "\n", 1
)                       = 1
exit_group(1)                           = ?
+++ exited with 1 +++

【问题讨论】:

【参考方案1】:

我在 CentOS Linux 7 上使用 autossh 1.4e 时遇到了完全相同的问题。autossh 立即停止并打印了帮助,甚至没有尝试连接到 SSH。

解决方案是在命令行中指定-M 0

autossh -M 0 \
    -oStrictHostKeyChecking=no \
    -oServerAliveInterval=15 \
    -oServerAliveCountMax=4 \
    -L 3130:localhost:3130 \
    -N -i /path/to/some.pem user@remotehost

【讨论】:

这个解决方案解决了我在 Arch 上运行 autossh 1.4e 的问题。谢谢!【参考方案2】:

来吧...autossh 退出

write(2, "usage: autossh [-V] [-M monitor_"..., 69usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS]

这意味着您指定了错误的参数,它试图向您解释语法的样子。要查看问题所在,您可以尝试以下几种方法:

使用-vvv 切换到ssh 以查看来自ssh 的更详细日志。 使用AUTOSSH_DEBUG 环境变量从autossh 获取一些调试日志。

【讨论】:

不,不是这样。正如我写的那样,完全相同的命令在另一台运行 Ubuntu 的服务器上运行。还尝试使用-vvv 和设置AUTOSSH_DEBUG,但它似乎在考虑到这些之前就退出了。唯一能运行的是autossh -V,但这不是很有用。 CentOS 6 已经很老了,所以可能有更旧的版本,它的工作方式可能有点不同。 我不想升级我的整个基础架构。如果没有选择,我会这样做,但仍然......

以上是关于autossh 失败,退出状态为 1,没有错误消息的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 pip 在 python 3 中安装 GDAL(clang 失败,退出状态为 1)

错误:安装脚本退出并出现错误:命令“gcc”失败,退出状态为 1

安装 Reportlab(错误:命令“gcc”失败,退出状态为 1)

错误:命令“c++”失败,退出状态为 1

错误:命令“gcc”在 CentOS 上失败,退出状态为 1

错误:安装 eventlet 时命令“gcc”失败,退出状态为 1