小编Pav*_*rda的帖子

使用 SSH 处理无密码帐户的一致且安全的方法

我必须承认,在某些情况下,我喜欢没有密码的服务器。一个典型的服务器容易受到任何物理访问它的人的攻击。因此,在某些情况下,物理锁定它是可行的,然后信任任何物理访问。

基本概念

从理论上讲,当我实际到达这样的服务器时,我应该能够通过简单地输入root登录名来执行没有密码的管理任务,并且不应该要求我输入密码。这同样适用于用户帐户,但人们不会真正以物理方式访问它们。因此(偶尔)本地访问不需要系统密码。

在远程访问服务器时,无论是出于管理目的还是用户帐户,我都希望始终使用 SSH 私钥。为刚创建的帐户设置 SSH 密钥非常容易,因此(常规)远程访问不需要系统密码。

# user=...
# 
# useradd -m "$user"
# sudo -i -u "$user"

$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
Run Code Online (Sandbox Code Playgroud)

结论是,理论上,对于这样的用例,我们不需要任何系统密码。所以问题是,我们如何配置系统和用户帐户以使其以一致且安全的方式发生。

本地访问详情

我们如何确保无需密码即可在本地访问 root 帐户?我不认为我们可以使用,passwd -d因为这会使 root 访问过于宽松,非特权用户可以免费切换到 root,这是错误的。我们无法使用,passwd -l因为它会阻止我们登录。

请注意,本地访问仅与使用本地键盘的访问有关。因此,有效的解决方案必须不允许任何用户切换(无论是使用susudo)。

远程访问详情

直到最近,上述解决方案还可以使用,但现在 SSH 开始检查锁定的用户帐户。passwd -d出于同样的原因,我们可能无法使用。我们不能使用,passwd -u因为它只是抱怨它会导致什么passwd -d

这部分有一个使用虚拟密码的解决方法。

user=...

echo -ne "$user:`pwgen 16`\n" …
Run Code Online (Sandbox Code Playgroud)

security password login ssh key-authentication

13
推荐指数
1
解决办法
3423
查看次数

IPv6 连接超时

我遇到了 IPv6 连接问题。只有那些。他们大约每 10 分钟超时一次(我想是因为地址更新)。

发生在我在一年左右的时间里尝试过的每种基于 debian 的 linux,x86 和 x64,跨不同的 PC,有线和无线。

我目前正在使用带有内核 3.13.0-37-generic x86_64(以前是 3.2.0-60)和 NetworkManager 0.9.8.8 的 Linux Mint 17.1。有时,当我尝试立即重新启动下载时,我会收到“没有到主机的路由”。因为我的 IPv6 地址似乎暂时消失了。
像这样:http : //pastebin.com/4Xida2qu

我正在运行双栈 IPv4 - IPv6 (PPPoE),这是我的 Netgear DGND3700v2 路由器(固件版本 V1.1.00.22_1.00.22)的配置方式:http ://i.imgur.com/YgxAyQb.png

有问题的网络配置文件设置为忽略IPv6,但无论如何我都在获取全球 IPv6 地址。更改为 auto 没有任何区别。这令人困惑,但我想这只是内核在做它的工作。

防火墙规则或缺乏规则没有任何区别,但它们基本上是:

iptables -P INPUT DROP
ip6tables -P INPUT DROP
iptables -P FORWARD DROP
ip6tables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
ip6tables -A INPUT …
Run Code Online (Sandbox Code Playgroud)

networking debian ipv6 timeout

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

source /dev/stdin 没有按预期工作

让我们从对我source /dev/stdin有用的简单测试开始,以检查是否可以使用。

# echo -ne 'echo a\necho b\n' | source /dev/stdin
a
b
Run Code Online (Sandbox Code Playgroud)

现在我想获取一个实际的函数。

# echo -ne 'f() { echo a; }\n' | source /dev/stdin
# f
-bash: f: command not found
Run Code Online (Sandbox Code Playgroud)

现在让我们尝试使用临时文件。

# echo -ne 'f() { echo a; }\n' > tempf
# source tempf
# f
a
Run Code Online (Sandbox Code Playgroud)

所以临时文件有效。但这对我来说非常不方便,而且我看不出有什么正当理由说明管道不能正常工作。

# bash --version
GNU bash, version 4.2.53(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; …
Run Code Online (Sandbox Code Playgroud)

bash pipe shell-script

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