我是 Linux 新手,正在尝试由主机预先配置的 Ubuntu 10.04。
当我使用预先配置的帐户登录(SSH)时,shell 提示为:user@hostname:~$
向上箭头滚动最近的 shell 命令列表,制表符完成按预期工作。
但是,当我创建一个帐户并使用该帐户登录 (SSH) 时,shell 提示只是“$”,向上箭头仅打印一个控制字符 (^[[A)。
谁能告诉我如何设置我的提示、制表符完成和向上箭头行为?当我向上箭头时,我得到控制字符这一事实让我认为我的帐户(或会话)处于某种我不熟悉的模式。
我知道 bashrc 中存储了 tab-completion 代码,我可以取消注释,但这似乎没有任何影响,即使在注销并重新登录后也是如此。
当我使用新帐户通过 SSH 登录时,我是否处于某种奇怪的模式,或者是否只需要设置一些会话/帐户设置,并且如果我知道要查找的内容,就可以在 Internet 上的任何地方找到信息?
我正在尝试使用 nginx 通过 https 连接设置 ssh。我还没有找到任何有效的例子,所以任何帮助将不胜感激!
~$ cat .ssh/config
Host example.net
Hostname example.net
ProtocolKeepAlives 30
DynamicForward 8118
ProxyCommand /usr/bin/proxytunnel -p ssh.example.net:443 -d localhost:22 -E -v -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)"
~$ ssh user@example.net
Local proxy ssh.example.net resolves to 115.xxx.xxx.xxx
Connected to ssh.example.net:443 (local proxy)
Tunneling to localhost:22 (destination)
Communication with local proxy:
-> CONNECT localhost:22 HTTP/1.0
-> Proxy-Connection: Keep-Alive
-> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
<- <html>
<- <head><title>400 Bad Request</title></head>
<- <body bgcolor="white">
<- <center><h1>400 Bad …Run Code Online (Sandbox Code Playgroud) 我的问题是,我必须在服务器上设置环境变量(如 GIT_EXEC_PATH)。我需要每个连接的变量(所以通过 bash 和远程命令)。我设法通过 bash 使用 .bash_profile 设置了这些变量,但是我在使用远程命令时遇到了问题。我发现可以在实际 rsa 密钥之前在 ~/.ssh/authorized_keys 中编写命令,但我不想总是在那里写,我需要一个永久的解决方案......我发现 ~/.ssh /rc 文件由每次 ssh 登录执行,所以我把我的 env 变量声明放在那里,但它没有用。变量在 rc 文件中设置,但之后它们消失了。:S 也许 rc 文件在子外壳中运行 :S 有没有办法在 bash 和远程命令中定义这些变量而无需重复代码?
编辑:
我编辑了这个问题,因为服务器是一个godaddy共享主机,所以它有一个独特的配置。/etc/ssh/sshd_config 和 /etc/ssh/ssh_config 文件是空的。这些文件中有注释,如果你好奇我可以复制到这里。
概括:
我可以很好地配置 bash(使用 .bash_profile),但我无法配置远程调用。那就是问题所在。我正在寻找一个由 bash 和远程命令提供的文件。
例如:
git-upload-pack 命令找到 exe 文件,因为设置了 GIT_EXEC_PATH 环境变量,但是使用 remote: "git clone user@domain.com:myrepo local/myrepo" 服务器找不到该命令,因为 GIT_EXEC_PATH未设置。
编辑2:
根据this和我的printenv 日志: …
一段时间以来,我一直使用 rsync/ssh 将我的共享主机内容备份到我的个人 Synology NAS(212j),并且效果很好。有关信息,我使用无密码ssh连接。
3 天前,我更新了我的 NAS 软件,因为(或者至少我相信是从那以后),备份将不再起作用。我在主机上收到以下错误:
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
ERROR: module is read only
Run Code Online (Sandbox Code Playgroud)
..我不明白。除了我所知道的与rsyncor相关的源和目标中没有任何变化之外ssh,我确实检查了一些事情,一切似乎都很好:
ssh好用户从主机连接到我的 NAS,所以像密钥这样的 ssh 东西没有改变。rsyncthrough使用的用户创建文件、目录等ssh)。我在这里和那里读到错误意味着我必须确保我rsyncd.conf拥有read only = no它的权利,但据我所知,我从来没有使用rsyncd过,因为我从来没有为它配置过任何东西,直到现在它就像一个魅力。 .
我使用以下命令进行备份:
rsync -ab --recursive \
--files-from="$FILES_FROM" \
--backup-dir=backup_$SUFFIX \
--delete \
--filter='protect backup_*' \
$WDIRECTORY/ \
remote_backup:$REMOTE_BACKUP/
Run Code Online (Sandbox Code Playgroud)
所以我被卡住了,真的无法弄清楚发生了什么。
编辑:
正如评论中所建议的那样,我还尝试将命令传递给 ssh(但不是从 ssh …
针对SSH 上与Logjam相关的攻击的一种建议的缓解策略是使用类似的东西生成自定义 SSH Diffie-Hellman 组(以下针对 OpenSSH)
ssh-keygen -G moduli-2048.candidates -b 2048
ssh-keygen -T moduli-2048 -f moduli-2048.candidates
Run Code Online (Sandbox Code Playgroud)
然后用输出文件替换系统范围的模文件moduli-2048。(ssh-keygen -G用于生成候选 DH-GEX 素数,并ssh-keygen -T测试生成的候选者的安全性。)
这显然是在 SSH 服务器上做的一个合理的事情,否则将使用众所周知的组,这些组很适合预先计算,但是将自定义 SSH DH 组部署到仅客户端系统上是否有任何安全优势?(也就是说,系统连接到 SSH 服务器,但本身从不充当 SSH 服务器。)
我主要对与 Linux 上的 OpenSSH 相关的答案感兴趣,但更通用的答案也将不胜感激。
一位同事向我提供了一个 ssh 密钥,可以将其添加到authorized_keyslinux 服务器上的帐户的文件中,以便他们可以访问该帐户。
该文件如下所示:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20160816"
AAAAB3NzaC1yc2EAAAABJQAAAQEApoYJFnGDNis/2oCT6/h9Lzz2y0BVHLv8joXM
s4SYcYUVwBxNzqJsDWbikBn/h32AC36qAW24Bft+suGMtJGS3oSX53qR7ozsXs/D
lCO5FzRxi4JodStiYaz/pPK24WFOb4sLXr758tz2u+ZP2lfDfzn9nLxregZvO9m+
zpToLCWlXrzjZxDesJOcfh/eszU9KUKXfXn6Jsey7ej8TYqB2DgYCfv8jGm+oLVe
UOLEl7fxzjgcDdiLaXbqq7dFoOsHUABBV6kaXyE9LmkbXZB9lQ==
---- END SSH2 PUBLIC KEY ----
Run Code Online (Sandbox Code Playgroud)
authorized_keys(嗯,sshd)的手册页清楚地表明该文件希望每个键占用一行。所以我想我需要将此密钥转换为单行格式?我该如何实现?
我的~/.ssh/config文件条目中有本地转发定义,例如
HOST myServer
hostname 10.10.0.1
user xyz
LocalForward 8080 localhost:80
LocalForward 4000 127.0.0.1:4000
...
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力,但我也有脚本来同步一些数据。
这些脚本在已经存在连接的情况下尝试连接到服务器时会显示许多警告。
bind: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 8080
bind: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 4000
....
Run Code Online (Sandbox Code Playgroud)
是否有一种巧妙的使用方法ssh或rsync选项可以禁用会话的所有本地转发?
显然我可以复制&粘贴每个配置块,并构建一个有本地转发的和一个没有本地转发的,但我希望有一个更好的解决方案。
我正在运行 Ubuntu Desktop 作为我的主要机器,我将其称为 D。我想通过 ssh 连接到服务器 S,但防火墙阻止了我。
我可以通过非常繁琐的路径访问服务器 S,涉及 Windows 虚拟机和PuTTY。这使得使用此服务器非常烦人:完全不同的环境,复制/粘贴不起作用,连接到桌面时我无法正确使用桌面(Alt-Tab 被虚拟机破坏)等
我已经验证我可以从服务器 S ssh 到我的台式机 D(与我需要的相反)。
我能否以某种方式从服务器启动“端口转发”或类似功能,以便我可以从我的桌面 ssh 到服务器?
我使用 SSHFS 在我的主机上挂载一个远程文件系统,我希望能够从 Docker 容器内部访问它。
我挂载远程文件系统
sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) user@remote:directory /path/to/sshfs
而且,使用 Docker,根据我的使用情况,我收到以下错误--mount:
docker run -it -v /path/to/sshfs:/target myimage bash
docker: Error response from daemon: error while creating mount source path '/path/to/sshfs': mkdir /path/to/sshfs: file exists.
Run Code Online (Sandbox Code Playgroud)
或-v:
docker run -it --mount src=/path/to/sshfs,target=/target,type=bind myimage bash
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /path/to/sshfs.
See 'docker run --help'
Run Code Online (Sandbox Code Playgroud)
是否可以将 sshfs 挂载点挂载到容器中?