2018年5月

在阿里云ECS实例“管理终端”里用“复制命令输入”下载安装Windows独立更新包

在“阿里云技术交流”群里看到的例子,当时群主是为网友通过更改注册表的方法来恢复远程桌面连接。

背景:微软在5月提供了补丁,如果服务端或客户端的 CredSSP 协议 相关的文件不一致,那远程桌面连接时可能会报错。

  1. 出现身份验证错误,要求的函数不支持。这个可能是由于CredSSP加密Oracle修正
    credSSP-1.png
  2. 在ECS实例控制台,用“管理终端”登录到 Windows 2012 R2
    credSSP-2.png
  3. 提示有30天无法检查有无更新了
    credSSP-3.png
  4. 当前的Windows更新状态
    credSSP-4.png
  5. 手动检查更新,代码 80072EE2 失败
    credSSP-5.png
  6. 已安装的Windows更新是在2017年9月14日
    credSSP-6.png
  7. 运行 Internet Explorer 浏览器,鼠标定位到浏览器的地址栏,且切换到输入法为英文
    credSSP-13.png
  8. 通过“管理终端”右上角的“复制命令输入”功能,复制粘贴命令,本例是一个Windows独立更新包的下载地址: https://microsoft-kb.oss-cn-beijing.aliyuncs.com/windows8.1-kb4103725-x64.msu
    credSSP-14.png
  9. 一条长长的网址复制到IE浏览器的地址栏里了
    credSSP-15.png
  10. 如启用了 Internet Explorer 的增强安全配置功能,需手动将网址加到信任网站列表中
    credSSP-16.png
  11. 保存Windows补丁包
    credSSP-17.png
  12. 安装Windows独立补丁包成功
    credSSP-18.png
  13. 重启Windows后,可以正常使用远程桌面连接了
    credSSP-19.png

链接:

在阿里云“专有网络”中配置 IIS FTP 访问

环境:Windows 2012 64位系统,IIS FTP

过程:

  1. 用 FileZilla Client 连接 IIS FTP,能成功连接,但“读取目录列表失败”
    iis-ftp-1.png
  2. 在 IIS 管理器里,点击计算机名称,本例是 iZdp5...,再点击“FTP防火墙支持”
    iis-ftp-4.png
  3. 填写数据通道端口范围和外部IP地址,本例是填写了5000-6000的端口范围,外部地址为ECS实例公网IP
    iis-ftp-5.png
  4. 如果ECS实例安全组没有允许外网访问上边设置的端口范围,需要添加
    iis-ftp-6.png
  5. 在安全组规则中,需要允许TCP 21端口和数据通道端口范围(TCP 5000-6000)
    iis-ftp-7.png
  6. 在 FileZilla Client 的站点管理里,使用“传输设置”里的“主动”
    iis-ftp-8.png
  7. 再次在FTP客户端里连接测试,成功了
    iis-ftp-9.png

参考:

通过javamail,用免费阿里云邮箱账号发邮件

环境:Debian9, OpenJDK-8,tomcat-8.5,javamail-1.16.1

过程:

  1. apt update && apt upgrade && apt autoremove # 更新软件
  2. apt install openjdk-8-jdk # 安装 openjdk-8
    javamail-2.png
  3. apt install libservlet3.1-java # 安装 Java Servlet 和 JSP 库
  4. mkdir -p /var/lib/tomcat8/webapps/ROOT/WEB-INF/lib # 创建测试lib目录
  5. cd /var/lib/tomcat8/webapps/ROOT/WEB-INF/lib && wget https://github.com/javaee/javamail/releases/download/JAVAMAIL-1_6_1/javax.mail.jar # 下载javamail-1.6.1到lib目录中
  6. vi /var/lib/tomcat8/webapps/ROOT/javamail.jsp # 创建测试发邮件表单 javamail.jsp,内容如下,此例是通过连接smtp.aliyun.com 的 465端口,账户名是 anqunhe@aliyun.com

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    <%
    //homepage:  http://cn.waterlin.org/
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html; charset=utf-8");
    %>
    <%@ page import="javax.mail.*"%>
    <%@ page import="javax.mail.internet.*"%>
    <%@ page import="javax.activation.*"%>
    <%@ page import="java.util.*,java.io.*"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>JavaMail 电子邮件发送系统</title>
    </head>
    
    <body>
    
    <form action="" method="post" OnSubmit="">
    收件人Email:<br /> <input type="text" name="recipients"><br />
    发件人Mail:<br /> <input name="frommail" type="text" size="30" /><br />
    邮件标题 <br /> <input name="subject" type="text" size="50" /><br />
    内容:<br /> <textarea name="contents" cols="50" rows="10"></textarea> 
     <br /> <input type="submit" name="Submit" value="发送邮件" />
    <form>
    
    <%!
    //相应的服务器信息
    String host = "smtp.aliyun.com";
    String user = "anqunhe@aliyun.com";
    String password = "密码";
    String contentType="text/html; charset=utf-8";
    
    private class Authenticator extends javax.mail.Authenticator
    {
     public PasswordAuthentication getPasswordAuthentication()
     {
         String un = user;
         String pw = password;
         return new PasswordAuthentication(un, pw);
     }
    }
    %>
    <%
    String touser = request.getParameter("recipients")!=null ? request.getParameter("recipients") : "";
    
    
    String fromuser = request.getParameter("frommail")!=null ? request.getParameter("frommail") : "";
    
    
    String subject = request.getParameter("subject")!=null ? request.getParameter("subject") : "";
    
    
    String contents = request.getParameter("contents")!=null ? request.getParameter("contents") : "";
    
    
    
    
    try {
     Properties props = new Properties();
     props.put("mail.smtp.auth","true"); //是否验证
     props.put("mail.smtp.host", host);
     props.put("mail.smtp.user", user);
     props.put("mail.smtp.password",password);
     props.put("mail.smtp.ssl.enable","true");
     props.put("mail.smtp.ssl.enable", "true");
     props.put("mail.smtp.port","465");//Gmail 的端口号
     
     //根据邮件服务器是否需要 ttl 验证选用
     //props.put("mail.smtp.starttls.enable","true");
     
    
     boolean sessionDebug = false;
     Authenticator auth = new Authenticator();
     //Session mailSession = Session.getDefaultInstance(props, auth); //有时可能被拒绝
     Session mailSession = Session.getInstance(props,auth); //用户验证;
     //Session mailSession = Session.getInstance(props);
     //mailSession.setDebug(sessionDebug);
    
    
     Message msg = new MimeMessage(mailSession);
     msg.setFrom(new InternetAddress( fromuser ));
     msg.setRecipient(Message.RecipientType.TO, new InternetAddress( touser ));
     msg.setSubject( "邮件标题:" +subject);
     //((MimeMessage)msg).setSubject(subject, "GBK"); //设置中文标题
     msg.setSentDate(new Date());
    
     String text =  contents + "<hr>javamail.jsp 发送认证邮件<b>测试</b>。";
    
     msg.setContent(text, contentType);
    
     Transport transport = mailSession.getTransport("smtp");
     transport.connect(host,user,password);
    
     transport.send( msg );
    %>
    
    <p>你的邮件已发送,<a href="./javamail.jsp">请返回。</></p>
    
    <%
    }
    catch (Exception m) { 
         
    }
    %>
    
    </body>
    </html>

    javamail-7.png

  7. 填写好表单,测试发邮件。成功(在垃圾箱中)。
    javamail-8.png

参考:

果园大森林药店开业送鸡蛋

今日路过,看到果园路口路边有人聚集,“贺大森林盛大开业新鲜鸡蛋免费送”。

没近前去看,但这个大森林店应该营业很久了,为什么才“盛大开业”呢?但招牌是搞得比之前大,比之前好看了,估计重新装修门面。远看摆有标价的“小柴胡”和“夏桑菊”等。

da-sen-lin-1.jpg

在 Debian 9 里安装 php5.3 fpm

Debian 9 仓库里默认的php版本是7.0,如果网站程序一定需要php5.3,那可以尝试编译安装php5.3。

测试机是阿里云公共镜像Debian 9 64位。

过程:

  1. 先安装好 nginx + php7-fpm + MariaDB
  2. apt install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dev libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libkrb5-dev libxml2-dev libxslt1-dev libltdl-dev libmariadbclient-dev-compat # 安装好相应的开发包,编译安装时要用到
  3. 因为Debian9里的OpenSSL版本相对较高,所以需要先安装低版本的:

    cd /tmp
    wget "https://www.openssl.org/source/old/1.0.1/openssl-1.0.1t.tar.gz"
    tar xzf openssl-1.0.1t.tar.gz 
    cd openssl-1.0.1t
    ./config shared --prefix=/opt/openssl
    make -j $(nproc) && make install
    ln -s /opt/openssl/lib /opt/openssl/lib/x86_64-linux-gnu
    wget -O /opt/openssl/ssl/cert.pem "http://curl.haxx.se/ca/cacert.pem"
  4. 做一些符号链接,让php5.3在编译安装时能找到

    ln -s /opt/openssl/lib/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/
    ln -s /opt/openssl/lib/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/
    ln -fs /opt/openssl /usr/local/ssl
    ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
    cd /usr/include && ln -s x86_64-linux-gnu/curl
  5. 下载php5.3.29源码包,保存解压到 /usr/local/src/php5.3-build

    mkdir -p /opt/php-5.3
    mkdir /usr/local/src/php5.3-build
    cd /usr/local/src/php5.3-build
    wget -c http://php.net/get/php-5.3.29.tar.bz2/from/this/mirror -O php-5.3.29.tar.bz2
    tar jxf php-5.3.29.tar.bz2
    cd /usr/local/src/php5.3-build/php-5.3.29
  6. ./configure --prefix=/opt/php-5.3 --enable-mbstring --with-libxml-dir=/usr --enable-soap --with-curl --with-mcrypt --with-zlib --disable-rpath --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl=/opt/openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm # 配置
    php5.3-6.png
  7. make && make install # 编译安装
    php5.3-8.png
  8. 复制默认的php.ini及fpm配置文件

    cp /usr/local/src/php5.3-build/php-5.3.29/php.ini-production /opt/php-5.3/lib/php.ini
    cp /opt/php-5.3/etc/php-fpm.conf.default /opt/php-5.3/etc/php-fpm.conf
  9. vi /lib/systemd/system/php-5.3-fpm.service # 配置php5.3-fpm服务

    [Unit]
    Description=The PHP 5.3 FastCGI Process Manager
    After=network.target
    
    [Service]
    Type=simple
    PIDFile=/opt/php-5.3/var/run/php-fpm.pid
    ExecStart=/opt/php-5.3/sbin/php-fpm --nodaemonize --fpm-config /opt/php-5.3/etc/php-fpm.conf
    ExecReload=/bin/kill -USR2 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
  10. systemctl start php-5.3-fpm.service # 启动php5.3-fpm
    php5.3-9.png
  11. 在相应的站点配置内容中,将php交由 php5.3 处理
    php5.3-10.png
  12. phpinfo输出及phpmyadmin操作,基本正常
    php5.3-11.png

参考: