我在主人上的 puppet.conf
[master]
certname = myname.mydomain.com
ca_server = myname.mydomain.com
certdnsnames = puppet;puppet.local;myname.dyndns.org;hivemind.local;
Run Code Online (Sandbox Code Playgroud)
根据我对 certdnsnames 定义的理解,以下应该有效:
puppet agent --server myname.dyndns.org --test
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
err: Could not retrieve catalog from remote server: hostname was not match with the server certificate
Run Code Online (Sandbox Code Playgroud)
如何避免这个错误?如何正确定义certdnsnames?我找到了不同的文档,但没有简单的例子。ii使用“,”作为分隔,我根本无法签名。我也看到过类似的语法
certdnsnames = puppet:puppet.intra.myserver.fr,puppet.myserver.fr:puppet,puppet:puppet,puppet.intra.myserver.fr,puppet.myserver.fr
Run Code Online (Sandbox Code Playgroud)
http://projects.puppetlabs.com/issues/5776
但对我来说,不清楚何时添加“木偶:”,何时不添加。
许多教程告诉您像这样配置 ssh 服务器:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
Run Code Online (Sandbox Code Playgroud)
但是使用此设置,您无法使用 PAM,因为我计划将 2 Factor Auth 与 Google Authenticator(OTP 一次性密码)一起使用,我需要 PAM。
那么如何配置一个新的 debian jessie ssh 守护进程,如果我想阻止使用普通密码登录但仍然允许使用 PAM。
也许确切的问题是如何配置 pam 以禁止密码?
PAM 身份验证的详细信息
禁用基于 PAM 的密码身份验证相当不直观。几乎所有 GNU/Linux 发行版(Slackware 除外)以及 FreeBSD 都需要它。如果您不小心,您可以将 PasswordAuthentication 设置为“no”,并且仍然通过 PAM 身份验证仅使用密码登录。事实证明,您需要将“ChallengeResponseAuthentication”设置为“no”才能真正禁用 PAM 身份验证。FreeBSD 手册页有这样的说法,这可能有助于澄清情况:
请注意,如果 ChallengeResponseAuthentication 为“yes”,并且 sshd 的 PAM 身份验证策略包括 pam_unix(8),则无论 PasswordAuthentication 的值如何,都将允许通过质询-响应机制进行密码身份验证。
http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html
要从干净状态开始,我需要从命令行将硬盘重置为空状态。
这与运行擦除实用程序无关,不必覆盖数据。
这个问题与Deleting All Partitions From the Command Line非常相似
那里的解决方案效果很好,
dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc
Run Code Online (Sandbox Code Playgroud)
但是如果我想使用这样一个被覆盖的磁盘,我会收到设备仍在使用中的错误。
root@grml ~ # blockdev --rereadpt /dev/sda
BLKRRPART: Device or resource busy
Run Code Online (Sandbox Code Playgroud)
或者
root@grml ~ # partprobe
Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes. …Run Code Online (Sandbox Code Playgroud) 简而言之:
为什么 apache 自己重新启动或重新加载配置?
长版
在我的 debian lenny 稳定服务器上,它有一个非常默认的设置(apache2、mod_php、mysql 客户端、apc,...)我对我的 apc.ini 进行了更改,我不确定它是否有问题,因为它是一个生产服务器,我只是在没有重新启动网络服务器的情况下保护了文件。
今天@cron.daily时间(6:25),由于apc.ini错误,服务器自行重启并保持停机。我真的很想知道,为什么服务器会自行重启。还有为什么是今天?这是 cron.daily 时间而不是每周时间,错误的配置从星期二开始就在线。
定时任务:
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) …Run Code Online (Sandbox Code Playgroud) 我尝试使用一个模板创建两个不同的文件,因为它们仅相差一行。
file
{
"/tmp/bootstrap-raid.sh":
content => template("pxe/bootstrap.sh.erb"),
}
file
{
"/tmp/bootstrap-noraid.sh":
content => template("pxe/bootstrap.sh.erb"),
}
Run Code Online (Sandbox Code Playgroud)
bootstrap.sh.erb:
<% if ??? == "???" %>
-r yes \
<% else %>
-r no \
<% end %>
Run Code Online (Sandbox Code Playgroud)
我不能通过像 那样定义两次来传递变量$raid=yes file{} $raid=no file{},所以我试图file{}毫不费力地在每个变量中定义变量。然后我考虑在模板中使用目标文件名,<% if filename == "/tmp/bootstrap-raid.sh" %>这也是不可能的。
如何使用不同的“参数”两次调用模板
我的目标是不在清单文件中定义和调用额外的函数,或者制作两个模板。有任何想法吗?
模板中是否有任何预定义的默认变量,例如目标文件的文件名、模板名……?
编辑:另一个例子是在 debian 中有两个 php.ini 文件,一个用于命令行,一个用于网络服务器。我只想交换内存限制。但是每个服务器都需要两个 php.ini 文件。我正在寻找一种将硬编码参数传递给模板文件的方法,或者一种我可以if/then/else基于目标文件名的方法。当然,我知道我能够创建一个新的定义,我可以调用两次。但我正在寻找一种更简单的方法。
我对此进行了一些研究,但没有找到明确的答案。
我们有一个使用 PHP+Memcache 会话处理程序的 Web 应用程序。
我有几个问题,都是相互关联的,但最终我的问题是,“为什么 PHP 会话在我们认为应该到期时显然没有到期?” 即最终用户应该在设定的时间后退出应用程序,但不是。
下面是点,请帮我把它们连接起来,并告诉我我错在哪里:
用户没有被注销。
我怎么能调试呢?Memcache 并不完全透明。
没有工作的示例案例是会话超时设置为两小时的站点。示例用户会在晚上最后一次使用该站点,然后在 8 到 10 小时后返回该站点并仍处于登录状态。
预播工作非常适合我使用:
auto url=http://mydomain.com/preseed.cfg
Run Code Online (Sandbox Code Playgroud)
但是一旦我使用 https 连接,它就不再起作用了。
auto url=https://mydomain.com/preseed.cfg
Run Code Online (Sandbox Code Playgroud)
使用 wget 我可以毫无问题地下载预置文件,使用 lynx 我得到一个
"SSL-Error:no issuer was found"
Run Code Online (Sandbox Code Playgroud)
所以它看起来像一个证书问题,我使用startssl.com来生成我的免费证书,nginx充当ssl网络服务器(使用firefox访问https站点没有问题)。
如何调试这个?如何强制通过 ssl 连接获取文件?
在 puppetmaster 端,是否可以选择将节点设置为挂起(将其设置为 noop)?我正在寻找类似于下面示例中的设置。在定义中将名为 noop 的变量设置为 true 的每个节点都不会更新。
因此,在多个 puppet 客户端运行后,example1.node.com 将没有 test1 文件,但 example2.node.com 将拥有该文件。
有这样的选择吗?是否存在另一种方法?(当然我可以简单地在节点名称中添加一个“_”,它会停止匹配。我正在寻找官方方法。
node "example1.node.com"
{
$noop = true
file
{
"/root/test1":
content => "test",
ensure => present,
}
}
node "example2.node.com"
{
file
{
"/root/test1":
content => "test",
ensure => present,
}
}
Run Code Online (Sandbox Code Playgroud) 我使用旧版本的 example42 mysql 模块,它定义了 mysql.conf 文件但不定义其内容。Mmy 的目标是只包含 mysql 模块并在节点中添加内容定义。
class mysql {
...
file { "mysql.conf":
path => "${mysql::params::configfile}",
mode => "${mysql::params::configfile_mode}",
owner => "${mysql::params::configfile_owner}",
group => "${mysql::params::configfile_group}",
ensure => present,
require => Package["mysql"],
notify => Service["mysql"],
}
...
}
node xyz
{
include mysql
File["mysql.conf"] { content => template("mymodule/mysql.conf.erb")}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生一个“只有子类可以覆盖参数”
将内容定义添加到现有文件定义的正确方法是什么?
如何使用 make-jpkg 和 fakeroot 在 Debian Wheezy 上安装 Oracle Java?
在 debian wheezy 上安装 oracle java 的手册非常清晰易懂:
http://wiki.debian.org/JavaPackage https://blogs.oracle.com/marigan/entry/installation_of_the_jdk_on http://www.debian-administration.org/articles/142
以 root 身份运行:
make-jpkg jdk-7u21-linux-x64.tar.gz
fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz
结果出现以下错误:
您是真正的 root —— 不幸的是,一些 Java 发行版具有直接操作 /etc 的安装脚本,并且可能会导致您的系统出现一些不一致。相反,您应该成为非 root 用户并运行:
fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz
这不会对您的系统文件造成任何损害,并且仍然允许 Java 发行版成功解压。
正在流产。
作为普通用户运行:
make-jpkg jdk-7u21-linux-x64.tar.gz
fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz
导致警告/错误墙。
一些错误:
dpkg-shlibdeps: warning: Can't extract name and version from library name `libverify.so'
error: couldn't find library libxslt.so.1 needed by …Run Code Online (Sandbox Code Playgroud) 我正在运行带有 postifx 2.11.3-1 的 Debian 8.5,我尝试将整个 smtp 会话(包括数据)记录到mail.log.
-vvv通过添加到smtpdin 中(参见下面的整个文件)来增加详细程度,可以看到部分数据,master.cf但我不可能获得完整的数据,只记录了前 10 个字符。
邮件日志
--- snip ---
Sep 18 18:22:03 vagrant postfix/smtpd[9220]: rec_put: type T len 17 data 1474215723
Sep 18 18:22:03 vagrant postfix/smtpd[9220]: rec_put: type A len 18 data log_ident=
Sep 18 18:22:03 vagrant postfix/smtpd[9220]: rec_put: type A len 21 data rewrite_co
Sep 18 18:22:03 vagrant postfix/smtpd[9220]: rec_put: type S len 23 data foo@exampl
Sep 18 18:22:03 vagrant postfix/smtpd[9220]: rec_put: type A len …Run Code Online (Sandbox Code Playgroud) os: debian stable (squeeze) nginx:squeeze-backports 1.2.1-2~bpo60+1
try_files 对我来说很奇怪。
这按预期工作,如果未找到 $uri,则在本地尝试 -> 使用 @static 位置
try_files $uri $uri/ @static;
Run Code Online (Sandbox Code Playgroud)
仅在末尾添加 =404 会导致 404。如果我访问位于 $uri 或 @static 的现有文件,它是否仍然有效,并且仅在 @static 位置上找不到任何内容时才提供 404?
try_files $uri $uri/ @static =404;
Run Code Online (Sandbox Code Playgroud)
将 =404 放在 @static 之前使其再次工作。为什么?如果文件不在 $uri 或 $uri/ 位置,而是在 @static 上,它应该导致 404 因为 =404 是在 @static 之前(根据我的理解)。如果我访问一个位于 $uri 的文件,它会从 nginx 正确提供(不访问 @static 后端或 =404)
try_files $uri $uri/ =404 @static ;
Run Code Online (Sandbox Code Playgroud)
我很困惑
编辑:我的目标是:测试文件是否在本地,然后检查该文件的所有上游服务器,如果在这些位置找不到,则返回 404
配置:
upstream domain.com_upstream
{
server yyy.yyy.yyy.yyy:8000 weight=10 max_fails=3 fail_timeout=3s;
server zzz.zzz.zzz.zzz:8020 …Run Code Online (Sandbox Code Playgroud)