AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-630538

QF0's questions

Martin Hope
QF0
Asked: 2024-09-04 01:57:24 +0800 CST

ssh-keygen 没有读取 stdin 来获取加密密码(或者:ssh-askpass 是什么?)

  • 5

我正在使用ssh-keygen(OpenSSH v8.9) 在无头服务器上自动生成密钥。如果不需要密码,这很简单,但如果确实需要密码,则变得困难。ssh-keygen生成新密钥时,在 stdin 上需要 3 项内容:y,因为密钥文件已经存在,以及所需的密码,重复两次。

经过一些简化,我这样做如下:

$ printf -v input "y\npassword\npassword\n"
$ echo -n "$input"
y
password
password
$ echo -n "$input" | ssh-keygen -t ed25519 -a100 -f tmpkey

当我最初这样做时,我得到了这个输出:

Generating public/private ed25519 key pair.
tmpkey already exists.
Overwrite (y/n)? ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory

密钥对已创建,但私钥未加密。因此,我ssh-askpass在装有 X 的测试系统上安装了ssh-keygen。现在运行时,我得到了一个 OpenSSH 身份验证弹出窗口,并且 stdin 现在被忽略了。显然,即使我想要,也无法在无头服务器上使用图形弹出窗口。

那么到底发生了什么?我可以说服ssh-keygen自动输入密码吗?如果不行,我是否可以用来openssl添加密码,甚至创建文件?我确实想从中获取 OpenSSH 格式的密钥 - 我已经使用 openssl 自动化了 PKCS#8。

编辑

我找到了(not )SSH_ASKPASS_REQUIRE的环境变量。如果我将其设置为“never”,它确实会停止弹出窗口,但现在只会读取 stdin 的第一行,并忽略接下来两行的密码。所以,它对我没有任何帮助。sshssh-keygenssh-askpassssh-keygen

ssh
  • 2 个回答
  • 59 Views
Martin Hope
QF0
Asked: 2023-12-29 01:46:04 +0800 CST

如何使加密的交换分区设置在启动时保持不变?

  • 5

我有一个程序可以使用随机密钥手动创建一个普通的 dm-crypt 交换卷,这似乎可以工作。这是一个 QEMU/Ubuntu 22.04 系统。然而,重新启动后没有交换,所以我可能得到了我的/etc/crypttab和/或/etc/fstab,或其他东西,不正确。任何意见表示赞赏。

工作手册设置是:

    # swapoff -a
    # cryptsetup --type plain open /dev/mapper/vg0-swap encswap
    # mkswap /dev/mapper/encswap
    # /etc/init.d/cryptdisks start
    # swapon /dev/mapper/encswap
    
    # swapon -s
    Filename                Type        Size        Used    Priority
    /dev/dm-3               partition   2097148     0       -2
    # lsblk
    NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
    sda             8:0    0   50G  0 disk  
    ├─sda1          8:1    0    1M  0 part  
    ├─sda2          8:2    0    1G  0 part  /boot
    ├─sda3          8:3    0   13G  0 part  
    │ ├─vg0-swap  253:0    0    2G  0 lvm   
    │ │ └─encswap 253:3    0    2G  0 crypt [SWAP]
    │ ├─vg0-data  253:1    0 36.1G  0 lvm   /data
    │ └─vg0-root  253:2    0 10.9G  0 lvm   /
    └─sda4          8:4    0   36G  0 part  
      └─vg0-data  253:1    0 36.1G  0 lvm   /data
    sr0            11:0    1    4M  0 rom 
  # cryptsetup status /dev/mapper/encswap
  /dev/mapper/encswap is active and is in use.
  type:    PLAIN
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  key location: dm-crypt
  device:  /dev/mapper/vg0-swap
  sector size:  512
  offset:  0 sectors
  size:    4194304 sectors
  mode:    read/write

因此,为了使其持久,/etc/crypttab包含:

swap  /dev/mapper/encswap  /dev/urandom  plain,cipher=aes-xts-plain64,size=256,hash=sha256,swap,noearly

并/etc/fstab包含:

/dev/mapper/swap none swap sw 0 0

当系统启动dm-crypt或systemd运行默认的 90 秒超时时,似乎正在等待一个永远不会到达的密钥。系统日志也说了同样的事情——超时等待/dev/mapper/encswap。启动完成后,swapon -s不显示任何内容,并且lsblk不显示encswap设备(或任何交换设备)。有任何想法吗?

lvm
  • 1 个回答
  • 41 Views
Martin Hope
QF0
Asked: 2023-06-20 18:47:19 +0800 CST

反向 DNS 传播和缓存

  • 5

我昨天设置了一个 VPS(Ubuntu 22.04,在德国 Contabo)。不幸的是,我得到的反向 DNS 条目不正确(我输入的example.org是example.uk)。我很快发现了这一点,并纠正了它,然后mxtoolbox.com在dig我的本地系统上显示它正确解析为example.uk.

这个新系统必须与邮件服务器通信,该服务器也是 Ubuntu 22.04(位于英国的 Ionos)。但是,postfix邮件服务器会拒绝传入邮件,因为传入 IP 地址仍解析为example.org. 这种情况已经持续了大约16个小时。昨晚有一段时间邮件正在投递,但现在不投递了。

在邮件服务器上,dig +noall +answer -x ip-addr在 TTL 中显示 2 小时倒计时。然而,它然后再次循环,但仍然显示example.org。如果我用它刷新本地缓存sudo resolvectl flush-caches没有什么区别,但会再次开始倒计时。我已经在同一数据中心(英国 Ionos)的另一个 VPS 上尝试过此操作,它显示了相同的结果。

所以,我猜测 Ionos 有一个忽略上游 TTL 的 rDNS 缓存(因为mxtoolbox我自己的本地dig已经显示了 16 个多小时的正确example.uk结果)。那有意义吗?我可以在邮件服务器上设置本地解析器以(暂时)忽略任何上游缓存并获得权威答案吗?如何获得反向 DNS 的权威答案?

domain-name-system
  • 1 个回答
  • 49 Views
Martin Hope
QF0
Asked: 2023-04-29 19:58:57 +0800 CST

在备份期间停止 Apache 的最佳实践

  • 6

在备份期间,我需要“空闲”Apache,以便我可以停止 MySQL,然后备份 MySQL 和 SQLite 数据库。对数据库的唯一访问是通过 Apache。

目前,我正在考虑使用修改 Apache 配置的脚本来执行此操作,以将所有访问重定向到“站点关闭”页面,然后:

apache2ctl graceful
systemctl stop mysqld

但是,这似乎不是一个特别好的主意。graceful不会阻止所有的童工,并且可能会apache2ctl立即返回。这是一个非常低容量的服务器,备份在一个时区的半夜运行,我很确定没有请求会持续超过一分钟。

sleep 60有没有一种“好”的方法来处理这个问题,而不是仅仅在之后添加一个graceful?我在想做一个graceful-stop而不是打扰网站下页,设置GracefulShutdownTimeout为 60 秒,并且也休眠 60 秒可能是一个更好的主意。

apache-2.4
  • 1 个回答
  • 24 Views
Martin Hope
QF0
Asked: 2023-04-15 21:07:41 +0800 CST

Amazon 是否有名为“AmazonS3”的网络服务器?

  • 3

请注意,我了解“Amazon S3”是什么;我只询问处理 HTTP 接口的软件。

例如,如果我检查github.com的 HTTP 标头,响应标头之一是:

server: AmazonS3

Amazon 是否真的有一个名为“AmazonS3”的 Web 服务器,或者他们只是修改 Apache/nginx/etc 的标头?

web-server
  • 1 个回答
  • 39 Views
Martin Hope
QF0
Asked: 2022-12-07 11:06:54 +0800 CST

CGI 脚本:什么时候可以返回文档而不是 HTTP 响应?

  • 5

下面的脚本 1 是 bash,位于https://example.com/cgi-bin/test. 获取时它会产生输出“Under construction”。它回显Status和Content-type标题,以及一些 HTML。如果我改为尝试回显整个 HTML 文档,Apache 只会抱怨标题无效。

下面的脚本 2 是 php,位于https://example.com/cgi-bin/test2.php. 与 bash 脚本不同,这个脚本返回一个 HTML 文档。

为什么脚本 2 可以发送整个 HTML 文档,而脚本 1 却不能?

脚本 1

#!/bin/bash
cat <<'EOF'
Status: 200 OK
Content-type: text/html

<p>Under construction.</p>
EOF

脚本 2

<?php
print <<<EOF  
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    ...etc
  </head>

  <body>
  ...etc
  </body>
</html>
EOF;
?>

编辑

php有两种风格:CLI 和 CGI​​ 版本。如果您只是从命令行运行脚本 2,php test2.php那么唯一产生的输出php就是您所看到的:HTML 文档。php-cgi是 CGI 版本(安装在 Ubuntu/Deb 上apt install php-cgi)。Apache(有效地)运行 CGI 版本(在现实生活中,它的做法略有不同,但结果相同):

 $ php-cgi test2.php
Content-type: text/html; charset=UTF-8

<!DOCTYPE html>
...rest of doc

CGI 脚本必须至少返回Content-type到 Apache(但可以返回更多标头,包括Status)。所以答案是两个脚本都有效,因为脚本 1 显式返回Content-type,而 的底层 CGI 版本php做同样的事情。

bash 脚本可以返回整个 HTML 文档,只要它还返回Content-type.

apache-2.2
  • 3 个回答
  • 40 Views
Martin Hope
QF0
Asked: 2022-10-17 05:20:19 +0800 CST

如何说服远程 Postfix 允许从我的 ISP 分配的 IP 地址进行中继?

  • 2

场景:我正在本地网络上测试 SMTP 服务器,我现在需要检查它是否可以将电子邮件发送到网络。当然,问题是我通过我的 ISP 出去,而我的 ISP 分配的固定 IP 地址不在 DNS 上(我当然可以把它放在 DNS 上,但我无法设置反向查找,所以它不会有帮助)。

为了解决这个问题,我在远程服务器上设置了 Postfix,并且我试图通过该服务器将我的传出消息中继到该服务器上的本地收件人。这看起来应该很简单,但我显然遗漏了一些东西。这是一个新的 Postfix 3.6.4 设置,main.cf包含:

mynetworks = 127.0.0.0/8, 93.184.216.34/32
smtpd_helo_restrictions = permit_mynetworks, ...
smtpd_client_restrictions = permit_mynetworks, ...

93.184.216.34是我的 ISP 分配的地址,我的本地网络是dummy-domain.com. 当我尝试向服务器发送电子邮件时出现故障,服务器日志文件显示:

Oct 16 13:24:42 titan postfix/smtpd[19103]: connect from my-isp[93.184.216.34]
Oct 16 13:24:42 titan postfix/smtpd[19103]: NOQUEUE: reject: RCPT from my-isp[93.184.216.34]: 450 4.1.8 <[email protected]>: Sender address rejected: Domain not found; from=<[email protected]> to=<a-local-recipient-address> proto=ESMTP helo=<dummy-domain.com>
Oct 16 13:24:42 titan postfix/smtpd[19103]: lost connection after RCPT from my-isp[93.184.216.34]

postconf确认mynetworks,但它也这样说:

compatibility_level = 0
smtpd_relay_restrictions = ${{$compatibility_level} <level {1} ? {} : {permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination}}

我的理解可能是错误的,说默认smtpd_relay_restrictions不包括,与文档相反。所以我明确地将其设置为:permit_mynetworksmain.cf

smtpd_relay_restrictions = permit_mynetworks

重新启动,postconf现在准确地报告上面的行。但是,它仍然不起作用,服务器日志文件仍然显示相同的消息。有任何想法吗?以及如何postconf向我展示当前的真实设置,而不必担心兼容性级别?谢谢。

编辑

根据 anx 的回答,事实证明smtpd_client_restrictions = permit_mynetworks(“当客户端 IP 地址与 $mynetworks 中列出的任何网络或网络地址匹配时允许请求”)是不够的。你还需要

smtpd_sender_restrictions = permit_mynetworks

与permit_mynetworks之前reject_unknown_sender_domain。这一切都可以正常工作,无需对 DNS 进行任何更改/etc/hosts,也无需向 DNS 添加任何内容。

postfix
  • 1 个回答
  • 59 Views
Martin Hope
QF0
Asked: 2022-03-15 11:36:56 +0800 CST

配置 sendmail 以侦听备用端口

  • 0

我已设置sendmail为侦听端口 1234 而不是 25,只需更改为sendmail.mc:

DAEMON_OPTIONS(`Port=1234, Name=MTA')

这通常有效,但有一个例外。背景是我有一个relay监听25端口(relay必须有MX记录,所以一定是25端口)。中继通过 sendmail 发送邮件,因此 sendmail 监听localhost:1234. 也就是说,sendmail 只负责发送邮件,不负责接收。netstat/etc 确认中继正在监听 25,而 sendmail 正在监听 1234。

这适用于这两个测试用例:

  1. 我可以通过 telnet 发送电子邮件到 sendmail ( telnet localhost 1234)
  2. s-nail我可以通过适当的配置更改发送电子邮件( set mta=smtp://localhost:1234)

但是,如果我直接运行 sendmail ,则此设置不起作用:

sendmail -d8.20 -vt < test-email.txt

在这种情况下,sendmail 尝试通过连接到本地端口 25 来发送邮件,因此它实际上与本地中继通信,而不是远程 SMTP 服务器。调试输出显示:

[email protected]... Connecting to [127.0.0.1] via relay...
220 mydomain.org ESMTP mydomain relay

这让我很困惑——知道这里发生了什么吗?

编辑

取得一些进展。我在 Sendmail 8.15.2,Ubuntu 20.04 上。这个问题并不重要,除了 sendmail 用每 20 分钟运行一次的 cron 作业刷新它的 MSP 队列,所以我得到很多 syslog 失败条目,以及无法投递的电子邮件的大队列,因为 sendmail 找不到自己。

问题似乎如下。当您使用 sendmail 发送邮件(或管理队列)时,它(通常)是一个两步过程。您运行 sendmail,它读取submit.cf(而不是 sendmail.cf),并充当 MSA,将邮件提交给某物。那个东西通常是本地的 sendmail 守护进程,它会sendmail.cf在它启动时读取。

sendmail.cf告诉 sendmail 它需要监听localhost:1234传入的邮件。这意味着它submit.cf必须包含一个配置,告诉 sendmail 程序将外发邮件路由到localhost:1234.

相关submit.mc配置可能是FEATURE msp,默认为

FEATURE(`msp', `[127.0.0.1]', `25')

所以答案大概就是把 25 改成 1234 这么简单。不过,没那么容易。只需更改它、重新生成文件并重新启动 sendmail,就没有什么区别。事实上,使用其中一个或两个重新生成submit.cf完全m4为零make差异,或者为您提供一个cf带有注释掉的功能的文件。某处有一些魔法可以让您更改功能,但我不知道是什么。答案可能在/usr/share/sendmail/cf/feature/msp.m4,但我看不到。

sendmail
  • 0 个回答
  • 101 Views
Martin Hope
QF0
Asked: 2022-02-24 04:51:40 +0800 CST

同一网络上具有相同主机名的多个主机?

  • 0

假设情况:我在同一网络上有两台(Linux)计算机,主机名相同,但 FQDN 不同(foo.example.com和foo.example.org)。

它们具有不同的 MAC 地址,并从 DHCP 服务器获取它们的 IP 地址。

如果有的话,这可能会导致什么问题?/etc/hosts特别是,该网络中没有 DNS,IP 地址是从Windows中查找的。可以/etc/hosts包含多个具有相同别名的条目,还是应该省略别名?

networking hostname
  • 1 个回答
  • 457 Views
Martin Hope
QF0
Asked: 2021-06-17 11:08:52 +0800 CST

iptables DNAT 更改未显示在 Wireshark 中

  • 0

我想将接口上的所有传入流量重新路由ens4f0到 IP 地址 192.168.50.10,但 Wireshark 显示传入数据包的目标 IP 地址未更改。这是预期的行为吗?我以为 PREROUTING 先于其他任何东西进入?

我的iptables命令是:

# iptables -t nat -A PREROUTING -i ens4f0 -j DNAT --to 192.168.50.10
# iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 24618 packets, 1923K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       all  --  ens4f0 any     anywhere             anywhere             to:192.168.50.8
    0     0 DNAT       all  --  ens4f0 any     anywhere             anywhere             to:192.168.50.10
    0     0 DNAT       all  --  ens4f0 any     anywhere             anywhere             to:192.168.50.10

我知道传入的数据包来自 192.168.50.8,所以我也尝试过:

# iptables -t nat -A PREROUTING -i ens4f0 -j DNAT -s 192.168.50.8/32 --to 192.168.50.10
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       all  --  anywhere             anywhere             to:192.168.50.8
DNAT       all  --  anywhere             anywhere             to:192.168.50.10
DNAT       all  --  anywhere             anywhere             to:192.168.50.10
DNAT       all  --  192.168.50.8         anywhere             to:192.168.50.10
nat iptables wireshark
  • 1 个回答
  • 239 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve