openssh配置终极一帖
一、什么是openssh
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族
可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。
二、openssh版本协议和支持验证类型以及配置文件相关
1、openssh版本协议
openssh V1:存在安装漏洞,现已不再采用
openssh V2:现在推出的RHEL系列版本默认采用的版本协议
2、openssh支持验证类型:
2.1、基于口令的认证
2.2、基于密钥的认证
Note:RHEL默认是安装了openssh(客户端/服务器端并存)并置了开机自启动
[root@lovelace ssh]# rpm -qa | grep openssh;chkconfig --list | grep sshd openssh-server-4.3p2-82.el5 openssh-4.3p2-82.el5 openssh-askpass-4.3p2-82.el5 openssh-clients-4.3p2-82.el5 sshd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 + + [root@lovelace ssh]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.8 (Tikanga)
3、openssh客户端的使用
3.1、ssh –l username [hostname|ip]
由于机器的原因,中间有报错,但不影响结果
[root@lovelace ~]# ssh -l nick 192.168.2.29 reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: + #输入ifconfig命令,提示没有权限 [nick@nick ~]$ ifconfig eth0 | grep 'inet' -bash: ifconfig: command not found
3.2、ssh [hostname|ip]
如果不指定用户,默认会使用当前系统的当前用户
[root@lovelace ~]# ssh 192.168.2.29 reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! #我们没有指定用户,默认为root root@192.168.2.29's password: Last login: Fri Jun 7 20:20:09 2013 from 192.168.2.28 [root@nick ~]# ifconfig eth0 | grep 'inet addr' inet addr:192.168.2.29 Bcast:192.168.2.255 Mask:255.255.255.0
我们使用一个普通账户测试下
[lovelace@lovelace ~]$ ssh 192.168.2.29 The authenticity of host '192.168.2.29 (192.168.2.29)' can't be established. RSA key fingerprint is f9:ed:0e:99:f3:cb:85:8b:b6:c3:3b:85:a1:a3:3f:af. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.29' (RSA) to the list of known hosts. reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! #让输入密码进行验证 lovelace@192.168.2.29's password: Permission denied, please try again. lovelace@192.168.2.29's password: Permission denied, please try again. lovelace@192.168.2.29's password: Permission denied (publickey,gssapi-with-mic,password).
3.3、ssh username@[hostname|ip]
[lovelace@lovelace ~]$ ssh nick@192.168.2.29 reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: Permission denied, please try again. nick@192.168.2.29's password: Last login: Fri Jun 7 20:22:24 2013 from 192.168.2.54 [nick@nick ~]$
4、配置文件的讲解
openssh配置文件存放路径:
/etc/ssh
客户端配置文件:ssh_config
服务器端配置文件:sshd_config(对应的脚本文件:/etc/init.d/sshd)
这里我们主要看下sshd_config的配置:
[root@lovelace ssh]# cat sshd_config # $OpenBSD: sshd_config,v 1.73 2005/12/06 22:38:28 reyk Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options change a # default value. #端口号设置,默认是22号端口可自定义设置,但是客户端连接的时候后面要跟上端口号 #Port 22 #支持ssh协议类型,默认只开启ssh v2 #Protocol 2,1 Protocol 2 #指定sshd应当使用暗中地址族{any(默认)、inet(仅ipv4)、inet6(仅ipv6)} #AddressFamily any #指定监听的IP网络地址,默认监听所有地址 #ListenAddress 0.0.0.0 #ListenAddress :: + + #设定包含计算机私人密钥的文件 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key + + # Lifetime and size of ephemeral version 1 server key #设置多少秒之后自动生成服务器的密钥, #KeyRegenerationInterval 1h #定义服务器密钥的位数 #ServerKeyBits 768 + + # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH #指定日志消息通过那个日志子系统发送 SyslogFacility AUTHPRIV #设定sshd的日志等级 #LogLevel INFO + + # Authentication: #限定用户必须在指定的时间内认证登陆,0表示无限制,默认是120秒 #LoginGraceTime 2m #是否允许管理直接登陆 #PermitRootLogin yes #指定是否要求 sshd(8) 在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查 #StrictModes yes #指定每个连接最大允许的认证次数。默认值是 6 #MaxAuthTries 6 + + #设置是否允许只有RSA安全验证 #RSAAuthentication yes #是否允许公钥认证。默认值为”yes” #PubkeyAuthentication yes #存放该用户可以用来登录的 RSA/DSA 公钥。 #AuthorizedKeysFile .ssh/authorized_keys + + #下面是基于主机的认证(不建议使用,不在详解) # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes + + # To disable tunneled clear text passwords, change to no here! #基于口令的认证 #PasswordAuthentication yes #是否允许空密码 #PermitEmptyPasswords no PasswordAuthentication yes + + #是否允许质疑-应答(challenge-response)认证(不建议使用) # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no + + #Kerberos认证相关 # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no + + # # GSSAPI options #是否允许使用基于 GSSAPI 的用户认证。默认值为”no” #GSSAPIAuthentication no GSSAPIAuthentication yes #是否在用户退出登录后自动销毁用户凭证缓存。默认值是”yes” #GSSAPICleanupCredentials yes GSSAPICleanupCredentials yes + + #PAM认证模块 # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication mechanism. # Depending on your PAM configuration, this may bypass the setting of # PasswordAuthentication, PermitEmptyPasswords, and # "PermitRootLogin without-password". If you just want the PAM account and # session checks to run without PAM authentication, then enable this but set # ChallengeResponseAuthentication=no #UsePAM no UsePAM yes + + # Accept locale-related environment variables AcceptEnv LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL #是否允许TCP转发,默认值为”yes” #AllowTcpForwarding yes #GatewayPorts no + #设置是否允许X11转发 #X11Forwarding no X11Forwarding yes #指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。默认值是 10 #X11DisplayOffset 10 #sshd(8) 是否应当将X11转发服务器绑定到本地loopback地址。默认值是”yes” #X11UseLocalhost yes #设置sshd是否在用户登录的时候显示“/etc/motd”中的信息 #PrintMotd yes #指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间 默认值是”yes”(强烈不建议启用) #PrintLastLog yes #指定系统是否向客户端发送 TCP keepalive 消息。默认值是”yes” #TCPKeepAlive yes #是否在交互式会话的登录过程中使用 login默认值是”no” #UseLogin no #是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离 默认值是”yes #UsePrivilegeSeparation yes #PermitUserEnvironment no #是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密 可用值:”yes” “delayed”(默认) “no” #Compression delayed #设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,sshd(8) 将通过安全通道向客户端发送一个”alive”消息,并等候应答。默认值 0 表示不发送”alive”消息 #ClientAliveInterval 0 #Sshd在未收到任何客户端回应前最多允许发送多少个”alive”消息 默认值是 3 #ClientAliveCountMax 3 #ShowPatchLevel no #UseDNS yes #指定在哪个文件中存放SSH守护进程的进程号,默认为 /var/run/sshd.pid 文件 #PidFile /var/run/sshd.pid #最大允许保持多少个未认证的连接 默认值是 10 #MaxStartups 10 #是否允许 tun 设备转发 #PermitTunnel no #ChrootDirectory none + + #是否允许设置欢迎词之类的信息(不建议使用) # no default banner path #Banner /some/path + + #是否允许启动sftp-server # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server
5、ssh客户端自带的其他功能
5.1、sftp
sftp:类似ftp的工具,既是客户端又是服务器端
#sftp属于哪个安装包 [lovelace@lovelace ~]$ rpm -qf `which sftp` openssh-clients-4.3p2-82.el5 + #和ftp功能一致,只是不需要单独安装 + [lovelace@lovelace ~]$ sftp nick@192.168.2.29 Connecting to 192.168.2.29... reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: sftp> ls sftp> dir sftp> cd /etc sftp> ls DIR_COLORS DIR_COLORS.xterm Muttrc Muttrc.local NetworkManager X11 a2ps-site.cfg a2ps.cfg
5.2、scp
scp:两台主机直接复制数据(加密传送)
scp src dest (和cp用法一样)
参数:
-r 递归目录
-a 针对目录
scp 用户名@主机:/path/to/somefile /path/to/local
scp /path/to/local 用户名@主机:/path/to/somefile
#检查scp在哪个安装包里 [lovelace@lovelace ~]$ rpm -qf `which scp` openssh-clients-4.3p2-82.el5 + #查看当前目录下有哪些文件 [lovelace@lovelace ~]$ ls love name.txt test1 test2 + #拷贝name.txt文件大远程主机的桌面 [lovelace@lovelace ~]$ scp name.txt nick@192.168.2.29:~/ reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: name.txt 100% 42 0.0KB/s 00:00 + #在本地显示远程主机的桌面信息 [lovelace@lovelace ~]$ ssh nick@192.168.2.29 'ls ~;pwd' reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: name.txt /home/nick
5.3、ssh-copy-id
ssh-copy-id:将公钥传送到远程服务器
参数:
-i:指定拷贝文件
#查看ssh-copy-id属于哪个安装包 [lovelace@lovelace ~]$ rpm -qf `which ssh-copy-id` openssh-clients-4.3p2-82.el5
6、openssh的黑白名单(当白名单好黑名单共存的时候,黑名单失效)
这个在openssh安全的时候再提
7、其他
在本地显示远程主机的相关信息
命令格式:
ssh username@hostname 'command' 或者 ssh -l username hostname 'command'
[lovelace@lovelace ~]$ ssh nick@192.168.2.29 'cat ~/name.txt' reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: nick kale tony jack nick kale who you are [lovelace@lovelace ~]$
三、建立基于密钥的认证
步骤:
1、生成一对密钥
ssh-keygen
参数:
-t:指定加密类型
-f:指定保存在什么文件
-N:跳过私钥密钥认证
2、将公钥传输至服务器端某用户的家目录.ssh/authorized-keys文件中
可以使用ssh-copy-id或者scp来实现
Note:.ssh文件目录权限为700,其他任何值都不行
3、测试登陆
我画了一幅图来表达ssh认证方式的讲解(不知道是否表达清楚了)
下面来看下具体的操作步骤:
1、生成一对密钥
方法一、
#生成密钥对 [lovelace@lovelace ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/lovelace/.ssh/id_rsa): + #这里需要输入两次密钥验证密码 这里我们不在设置 Enter passphrase (empty for no passphrase): Enter same passphrase again: + #私钥保存路径及文件名 Your identification has been saved in /home/lovelace/.ssh/id_rsa. + #公钥保存路径进文件名 Your public key has been saved in /home/lovelace/.ssh/id_rsa.pub. The key fingerprint is: aa:0e:89:eb:83:55:44:d1:a1:ed:2d:81:aa:4e:47:29 lovelace@lovelace.localdomain
方法二、直接生成,不在询问用户输密码之类的信息
[lovelace@lovelace ~]$ ssh-keygen -t rsa -f .ssh/id_rsa -N '' Generating public/private rsa key pair. Your identification has been saved in .ssh/id_rsa. Your public key has been saved in .ssh/id_rsa.pub. The key fingerprint is: 62:23:24:34:dd:1a:85:2e:61:ca:cd:3d:e4:a1:32:5f lovelace@lovelace.localdomain [lovelace@lovelace ~]$ cd .ssh/;ls id_rsa id_rsa.pub
2、将公钥传输至服务器断某用户的家目录的.ssh/authorized-keys文件中
方法一、使用ssh-copy-id
#传输公钥文件到远程主机 [lovelace@lovelace .ssh]$ ssh-copy-id -i id_rsa.pub nick@192.168.2.29 10 The authenticity of host '192.168.2.29 (192.168.2.29)' can't be established. RSA key fingerprint is f9:ed:0e:99:f3:cb:85:8b:b6:c3:3b:85:a1:a3:3f:af. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.29' (RSA) to the list of known hosts. reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! + #这里需要输入一次远程主机对应账户的密码 nick@192.168.2.29's password: Now try logging into the machine, with "ssh 'nick@192.168.2.29'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. #查看远程主机桌面下.ssh目录下是否存在authorized_keys文件并查看内容 [lovelace@lovelace .ssh]$ ssh nick@192.168.2.29 'ls ~/.ssh/;cat ~/.ssh/authorized_keys' reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAy6bCpejLIIW+dinNwTrFymT0BNk10gSVqaas9CmdtDNfJdXZNX7IdXUU2xOnKYqcnt9gcTWS1RRP498hWdo/uWiEfBNXfMpzxqinBaW6UGSGG0/vWuviJbWdC9ccF6XYq9yVK831jkBrMAENM+FrKXAwWz8Y3LD6XJIe1TyegrOD1FzrJ6nTNSTUts0lcLwwQv4C8A4Rwks0rme8yirTjcFcAI3vBuoC1IJJhN0RQ7/Sn1Hx5m8t0J1FFFymn29HCEM46ZjMhRdiALkaathMgMLTwWfwi1lmkXBVtGlqM+RusFtlqjSzik2vjT1Rr7XCH4+tcLZxt8Rr4Ju2wpAqGw== lovelace@lovelace.localdomain
方法二、使用scp
#首先删除远程主机上的authorized_keys配置文件 + #登陆到远程主机,这里已经不需要密码验证了 [lovelace@lovelace .ssh]$ scp id_rsa.pub nick@192.168.2.29 [lovelace@lovelace .ssh]$ ssh nick@192.168.2.29 reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! Last login: Fri Jun 7 20:29:09 2013 from 192.168.2.54 [nick@nick ~]$ cd .ssh/ [nick@nick .ssh]$ ls authorized_keys + #清空authorized_keys [nick@nick .ssh]$ echo >authorized_keys [nick@nick .ssh]$ cat authorized_keys
#拷贝公钥到远程主机上,由于我们清空了远程主机上的authorized_keys 文件这里需要重新密码认证 [lovelace@lovelace .ssh]$ scp id_rsa.pub nick@192.168.2.29:~/ reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: id_rsa.pub 100% 411 0.4KB/s 00:00 + #登陆到远程主机 [lovelace@lovelace .ssh]$ ssh nick@192.168.2.29 reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! nick@192.168.2.29's password: Last login: Fri Jun 7 21:18:06 2013 from 192.168.2.54 [nick@nick ~]$ ls id_rsa.pub name.txt + #把公钥信息添加到authorized_keys 配置文件中去 [nick@nick ~]$ cat id_rsa.pub >>.ssh/authorized_keys + #查看文件内容 [nick@nick ~]$ cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAy6bCpejLIIW+dinNwTrFymT0BNk10gSVqaas9CmdtDNfJdXZNX7IdXUU2xOnKYqcnt9gcTWS1RRP498hWdo/uWiEfBNXfMpzxqinBaW6UGSGG0/vWuviJbWdC9ccF6XYq9yVK831jkBrMAENM+FrKXAwWz8Y3LD6XJIe1TyegrOD1FzrJ6nTNSTUts0lcLwwQv4C8A4Rwks0rme8yirTjcFcAI3vBuoC1IJJhN0RQ7/Sn1Hx5m8t0J1FFFymn29HCEM46ZjMhRdiALkaathMgMLTwWfwi1lmkXBVtGlqM+RusFtlqjSzik2vjT1Rr7XCH4+tcLZxt8Rr4Ju2wpAqGw== lovelace@lovelace.localdomain
3、测试登陆
#进行登陆远程主机测试 [lovelace@lovelace .ssh]$ ssh nick@192.168.2.29 reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! Last login: Fri Jun 7 21:23:35 2013 from 192.168.2.54 [nick@nick ~]$ exit logout Connection to 192.168.2.29 closed. + #进行登录远程主机测试 [lovelace@lovelace .ssh]$ ssh -l nick 192.168.2.29 reverse mapping checking getaddrinfo for . failed - POSSIBLE BREAK-IN ATTEMPT! Last login: Fri Jun 7 21:27:47 2013 from 192.168.2.54 [nick@nick ~]$
四、安全总结:
话说没有绝对的安全可言,但是相对于常规性的安全漏洞,我们还是要尽可能避免的。
关于验证安装这块:
1、密码周期性更换且足够复杂
2、使用非默认端口
3、限制登陆客户地址
4、限制管理直接登陆
5、仅运行有限用户登陆
6、使用基于密钥的认证
7、不要使用协议版本1
后记:本来想把标题设置为ssh学习呢,到最后一咬牙,一跺脚,就写了这个标题。
转载于:https://blog.51cto.com/lovelace/1217893
相关文章:

读书:历史 -- 海上丝绸之路
罗德里希普塔克 — 德国汉学家 海上丝路连结了古代世界贸易往来,见证了中华文明在人类历史中的枢纽位置。 王权集中的朝代中每一个流传后世的国家层级的决策无不彰显国家机器得强壮,但同样也很脆弱,决策者不可能时刻都能做出最为正确得选择。…

一.Linq to JSON是用来干什么的?
Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和修改部分的数据而非反序列化全部. 二.创建JSON数组和对象在进行Linq to JSON之前,首先要了解一下用于操作…

add python3.7 to path是什么意思_一起读源码:为什么 loguru 的时间 rotation 不能只精确到天...
摄影:产品经理猪耳朵与鹌鹑蛋做的皮蛋今天的问题来自未闻 Code 粉丝交流群:“loguru 每天自动生成的日志名字,可以只精确到日吗?”如下图所示:这里的每天自动生成日志的名字是什么意思呢?实际上指的就是rot…

hdu 4263(有限制的生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid4263 思路:将红边和蓝边单独求一次生成树,求的红边最多可以加入的边数cntr,蓝边最多可以加入的边数cntb,只要k满足条件k>(n-1-cntr)&&k<cntb&#…

Synchronized的两个用法
Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果 Synchronized的两个用法: 1)对象锁 包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(…

h5引入不同的js文件怎样让第二个js使用第一个js文件中的函数_px2rem-loader使用及注意事项...
1.安装lib-flexible.js; //基于vue-cli配置手淘的lib-flexible rem,实现移动端自适应2.安装px2rem-loader;//使用 webpack 的 px2rem-loader,自动将px转换为rem3.在项目入口文件main.js中引入lib-flexible;//(import …

C++中的explicitkeyword
在C程序中非常少有人去使用explicitkeyword,不可否认,在平时的实践中确实非常少能用的上。再说C的功能强大,往往一个问题能够利用好几种C特性去解决。但略微留心一下就会发现现有的MFC库或者C标准库中的相关类声明中explicit出现的频率是非常…

Entity Framework Code First在Oracle下的伪实现
为什么要说是伪实现,因为还做不到类似MsSql中那样完全的功能。Oralce中的数据库还是要我们自己手动去创建的。这里,我们舍掉了Model First中的EDMX文件,自己在代码里面写模型与映射关系,这又有点像是Code First模型了,…

leetcode-206 反转链表
描述如下: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 方法一:原地反转 数据结构如下 struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};ListN…

ios采用什么技术_在不锈钢技术成熟的今天,为什么汽车不采用呢?不仅仅是价格问题...
文/憨憨评车想必对于那些经常开车的人都会知道,我们的车子在行驶了几年之后,在性能方面必定是会有所下降的。然而还有一点也是非常让人头疼的,那就是车子的生锈问题。一旦车子的车身出现生锈情况的话,就会给人一种破破烂烂的感觉。…
Effective STL 为包含指针的关联容器指定比较类型
// 为包含指针的关联容器指定比较类型.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <set> #include <string> #include <iostream>using namespace std;struct StringPtrLess:public binary_function<const string*…

Android中处理崩溃异常
2019独角兽企业重金招聘Python工程师标准>>> 大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以…

python面试基本题(你需要的)
1、冒泡排序 lis [56,12,1,8,354,10,100,34,56,7,23,456,234,-58]def sortport():for i in range(len(lis)-1):for j in range(len(lis)-1-i):if lis[j] > lis[j1]:lis[j],lis[j1] lis[j1],lis[j]return lis 2、计算x的n次方的方法 def power(x, n):s 1while n > 0:n …

leetcode-92 反转链表II
题目描述如下: 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m 2, n 4 输出: 1->4->3->2->5->NULL 很明显这个题目是206 反转链表的进阶版 需要记…

地铁框架保护的原理_地铁屏蔽门是如何保证通讯的稳定?
地铁作为人们出行首选交通方式,安全可靠尤为重要,在复杂的地铁控制系统中,如何保障通讯的稳定性呢?本篇文章将从地铁系统中通讯单元的简单拓扑谈谈通讯防护的方案。随着我国经济的快速发展,地铁工程项目建设也处在快速…

HDU1548:A strange lift(Dijkstra或BFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高于n层, 给定起点与终点,要求出最少要按几次键 我的…

(转)C语言位运算详解
地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911说明:本文参考了http://www2.tsu.edu.cn/www/cjc/online/cyuyan/,算是对其的修正,在此将本文列为原创,实有抄袭…

[bzoj2300] [HAOI2011]防线修建
Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了。可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由…

leetcode-142 环形链表II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有…

1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory
1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory转载于:https://www.cnblogs.com/chunyou128/p/3921903.html

增加service_.NET Core + Kubernetes:Service
通过 .NET Core Kubernetes:Deployment 文章的介绍,我们可以通过 Deployment 控制器快速创建一组 Pod 来提供服务,每个 Pod 都会被分配一个集群内可见的虚拟 IP 地址,然后通过一个独立的 Endpoint(Pod IP ContainerPort)进行访问…

IIS配置相关问题:Framework 4.5 在IIS 7.5中运行
<system.webServer> <validation validateIntegratedModeConfiguration"false" /> <!--4.5 在IIS7.5中运行的时候--> <modules runAllManagedModulesForAllRequests"true" /> </system.webServer>转载于:https://…

[优先队列] 洛谷 P2085 最小函数值
题目描述 有n个函数,分别为F1,F2,...,Fn。定义Fi(x)Ai*x^2Bi*xCi (x∈N*)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。 输入输出格式 输入格式: 输入数据:第一行输…

leetcode-86 分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head 1->4->3->2->5->2, x 3 输出: 1->2->2->4->3->5 …

[WCF编程]1.WCF入门示例
一、WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有Http和Ftp的相关技术,…

ios 自动打包命令_iOS自动打包上传脚本
自从将swift2.2升级到swift3.0, 每次使用Xcode8编译都很慢,很是不爽,于是有了研究下xcodebuild命令行打包的想法,起初不知道用shell,还是用python, 在网上大概搜了一下,关于python的比较多点,于是就先学习p…

linux系统下添加新硬盘的方法详解
对于linux新手来说,在linux上添加新硬盘,是很有挑战性的一项工作。在Linux服务器上把硬盘接好,启动linux,以root登陆。 fdisk -l ## 这里是查看目前系统上有几块硬盘 Disk /dev/sda: 36.4 GB, 36401479680 bytes 255 heads, 63 s…

【CF EDU59 E】 Vasya and Binary String (DP)
题意 给一串01串,对该串进行若干次操作,直到串为空 操作为:选择一段连续的0或者1,删除它,拼接前后两部分成为新串,得到价值为a[删除的长度](a为给定的数组) 思路 一个非常规的DP 考虑题目所给的…

leetcode-21 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,…