相关疑难解决方法(0)

scp“丢失连接”但 ssh 工作正常

我可以通过 ssh 进入的服务器已经开始拒绝 scp。

$ scp ~/tmp/foo user@some.example.com:~/tmp/
lost connection
Run Code Online (Sandbox Code Playgroud)

随着scp -v -v我可以看到连接成功和转移看似成功,但没有文件出现在另一边。

OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /Users/schwern/.ssh/config
debug1: /Users/schwern/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to testcurrent01.dev.liquidweb.com [10.30.152.254] port 22.
debug1: Connection established.
debug1: identity file /Users/schwern/.ssh/id_rsa type -1
debug1: identity file /Users/schwern/.ssh/id_rsa-cert type -1
debug1: identity file /Users/schwern/.ssh/id_dsa type -1
debug1: …
Run Code Online (Sandbox Code Playgroud)

ssh scp

13
推荐指数
2
解决办法
6万
查看次数

ssh 而不使用用户的默认 shell

有人投票结束此问题,因为“不清楚你在问什么”。显然彻底不是一件好事,所以我会简洁:

当您通过 SSH 连接到远程主机时:是否可以直接执行程序,而不是在用户的默认 shell 下执行。

  • 网络是气隙的
  • 网络上的每个人都可以通过 shell 访问每台机器
  • IT 部门可以进行任何需要的更改,前提是这些更改不会增加某人获得 root shell 的风险(超出了已经可能实现的范围)。
  • 证明类似的事情是可能的:sftpssh“子系统”能够在不运行用户的默认 shell 的情况下执行,而scp子系统仍然使用它。
    • 我尝试实现一个子系统,但它仍然在用户的默认 shell 下执行。

我认为这个问题没有一个好的解决方案(除了说服大量非*nix人放弃他们多年来一直依靠的拐杖),但我想我应该把这个问题提出来希望我弄错了。


下面是不太简洁的问题。

在我的办公室里有很多人(3-500+)都在使用各种奇怪的配置。很难预测我们编写的软件对于给定用户的行为方式,因为他们的环境可能完全违反我们的期望。

为了解决这个问题,我更改了我们的构建以剥离用户的环境,这样它就不会影响构建,并且基于该策略的成功,我们进一步将软件的执行包装在执行相同操作的 shell 脚本中。

不幸的是,启动器仍然会受到用户环境的影响。当远程执行时,用户的.cshrc/.login通常会有一堆垃圾,导致启动器甚至开始执行之前的长时间延迟。

通常我会倾向于说“修复你的废话”,但我们不是在谈论 *nix 精明的人; 这是他们多年来依赖的拐杖,他们更倾向于继续将配置问题归咎于我们的软件。

简而言之,我正在寻找一种方法来完全缩短他们愚蠢的环境脚本。

为了模拟这种情况,我将默认 shell 设置为 tcsh 并放入hostname; sleep 10my .cshrc,然后运行一些测试:

  • sftp 不打印/睡眠——不过,这种情况下的目标机器是solaris,其中sftp 内置于sshd 中,并且我不认为要针对linux 机器进行测试。针对服务 sftp 连接的进程树运行ptree显示它没有在 shell 下运行。
  • scp 打印文本并休眠 10 秒
  • 通过 ssh 在远程主机上执行命令的每种变体都会导致命令在用户的默认 shell 下运行;我试过:
    • 显而易见的——通过 ssh 传递命令
    • command=.ssh/authorized_keys
    • 我在我的个人 Linux …

ssh shell

7
推荐指数
1
解决办法
1万
查看次数

无需获取 .bashrc 的 SSH

.bashrc我在通过 SSH 远程登录到服务器时正在试验我的文件。我无意中留下了一个exit,导致所有后续登录立即断开连接。我实际上被锁在门外了。我能够在具有 root 权限的人的干预下恢复访问权限,但是如果没有其他人的帮助,这可能吗?

我尝试做诸如运行ssh <server> 'bash --norc --noprofile'和 之类的事情ssh <server> 'mv .bashrc bashrc-backup',甚至尝试用 强制覆盖它scp empty-file <server>:.bashrc。然而,所有这些选项似乎都依赖于.bashrc在运行命令之前首先找到损坏的源,因此它们都不起作用。

很可能这种情况是没有办法摆脱的。但这是设计使然吗?为什么很容易将自己锁定在系统之外,例如仅通过运行,是否有原因ssh <server> 'echo exit > .bashrc'?有没有办法减少这种错误?

linux ssh terminal bash bashrc

6
推荐指数
1
解决办法
5630
查看次数

标签 统计

ssh ×3

bash ×1

bashrc ×1

linux ×1

scp ×1

shell ×1

terminal ×1