使用 SCP 时密码可见?

使用 SCP 时密码可见?

RHEL8(通过 ssh 默认 bash shell)

> scp source_path remote_host:destination_path &
> fg
Password: @#$#@#myPassword'sVisibleOhNo!!!

首先,这只是我的系统,还是可以重现?它不会提示我输入用户,并且只有当我在后台运行 scp 时才会发生这种情况(这一开始没有意义,但仍然如此)这是预期的行为吗?这不是问题吗?

答案1

它不是scp回显您键入的字符的 shell,而是根据运行程序给出的设置的内核。 (stty修改此设置)。

如果您输入stty -echo,您将没有回声,并且需要(盲目地)输入stty echo以恢复正常行为。

使用stty -echo &,bash 似乎使 TTY 状态回到回显模式。它可能与 相同scp。该行为可能取决于 shell,但 Fish 和 zsh 似乎与 bash 具有相同的行为。

答案2

由于@Frédéric Loyer 的回答,能够获得一些更多相关信息。我们可以使用以下任一脚本来查看与 scp 类似的行为。

> safe () (stty -echo; read password; stty echo)
> safe &

要不就

> (stty -echo; read password; stty echo)

fg最终,潜在的问题(安全性和其他问题)并不特定于 scp,而是与 shell 的回显设置之间的不良交互有关。这些可以stty -echo/echo分别使用手动启用/禁用。这使我们能够检查不同系统上的特定行为,而不需要多个主机、ssh 连接等。

MacOS 上的 zsh

> safe () (stty -echo; read password; stty echo)
> safe &
[1] 12345
>
[1]  + suspended (tty output)  safe
> fg
[1]  + continued  safe
stty: tcsetattr: Interrupted system call
im Getting The Same Issue(macOS zsh now)
>

RHEL 和 Ubuntu 上的 Bash 更糟糕

> (stty -echo; read password; stty echo) &
[1] 12345
> fg
( stty -echo; read password; stty echo )

[1]+  Stopped                 ( stty -echo; read password; stty echo )
> fg
( stty -echo; read password; stty echo )
VisiblePassword!!!
>

第一个 fg 之后它变得完全没有反应。必须执行 ctrl+z 和另一个 fg。

相关内容