我为什么拒绝写注释

      其实没有人问过我为什么不写注释,我也没有向别人说过我不写注释的原因。但是最近一直有人在我耳边说,你们这些鸟人为什么都不写注释了。所以我觉得我有必要做一下解释了。

      第一、什么情况下需要注释。如果你面对的受众是一些初学者或者非专业的人员,那么确实需要写注释,这一点在教科书上体现的最多。又或者,你所工作的语言是结构化编程之类的没有很强的层次性(包或者命名空间)和封装(类),那么你需要写注释(C是最好的例子)。最后,如果你写的是算法,或者你的函数中有魔数之类的东西,你需要加注释,比如如果你有一个函数如下,那么你最好写一些注释

public string GetRequestFile(){
    
if(String.IsNullOrEmpty(Request.QueryString["fileName"]))
    
return magicFileName;//你可能需要说明为什么会返回这样一个文件名
     normal procedure....
}

      第二、为什么我不写注释。首先我面对的是专业的人员,大家都是做软件的,没有可能看不懂。其次,现在项目的语言是C#,面向对象的,具有很好的封装性,一个类的代码行数不会很多(因为职责单一)。最后函数和类是自说明的是比较简小的,理解起来也没有什么困难(我写的函数一般不超过10行,如果异常处理多一点也就20行,函数名和类名也符合规范,类一般不超过150行)。

      第三、为什么会要求注释。1、程序写的很不好,函数和类名没有自说明(或者由于语言导致的,比如C)。2、代码阅读人员对业务不熟悉(建议先熟悉业务,因为业务是根本,技术只是实现而已)。3、代码阅读人员能力有限或者自身的经历导致了需要由注释看起。

      而要求我写注释的人属于第三的3。他本身是由PHP转过来的,而且其代码风格是纯粹的面向过程的,写的程序很多注释,但是也很长,经常一个页面下来也就1两个函数搞定,300行是家常便饭。因此他阅读程序养成了一个很不好的习惯的就是总是要全部把程序看完,才可以理清楚这个类是做什么的(类名和函数名对他来说都是浮云,GetRequestFile和GetResponeFile对他应该没有什么区别)。而很多时候我们看代码,第一个就是看类名,其次就是看被调用的函数的名称(公共方法),一般情况下,已经足够判断这个类是做什么的,还有提供的什么功能(如果不行,你可以跟类的作者说,重构一下吧,哥看得苦)。这里就要求我们写代码的时候要像写诗一样去写,就算不行,起码也要做到代码的自解释。因此如果你也是一个拒绝写注释的人,那么你写的代码满足第一和第二吗?

      最后被要求注释的类大概是这样的。

 

class UserAuth{
    public bool UserLoginAsClient(){
          ......
    }
    
public bool UserLoginAsManager(){
          ......
    }
    another private function
}

 

转载于:https://www.cnblogs.com/hrmai/archive/2011/05/14/2046043.html

<think> 我们正在解决用户的问题:使用Xshell连接Ubuntu系统时SSH服务器拒绝密码的原因。 根据用户提供的引用和之前的历史回答,我们可以总结可能的原因和解决方法。 引用[1]提到需要安装openssh-server以确保SSH服务端存在。 引用[2]和引用[3]都提到了修改sshd_config文件,特别是关于允许root登录的配置(PermitRootLogin)以及解决连接时出现的数据包异常问题。 可能的原因: 1. SSH服务未正确安装或未运行。 2. 用户名或密码错误(包括大小、键盘布局等问题)。 3. Ubuntu系统上的SSH服务配置禁止密码认证或禁止该用户登录。 4. 防火墙或安全组阻止了连接。 5. 服务器发送了一个意外的数据包(如引用[2]所述)。 我们按照步骤来排查: 步骤1:验证SSH服务状态 在Ubuntu上执行: ```bash sudo systemctl status ssh ``` 确保状态为active (running)。如果没有运行,启动它:`sudo systemctl start ssh`。 步骤2:检查用户名和密码 - 确保在XShell中输入的用户名和密码正确(注意大小)。 - 尝试在Ubuntu本地使用该用户名和密码登录,确认密码正确。 - 如果忘记密码,可以重置密码:`sudo passwd 用户名` 步骤3:检查SSH配置 编辑SSH配置文件: ```bash sudo vim /etc/ssh/sshd_config ``` 注意以下关键配置项: - `PasswordAuthentication yes` # 确保允许密码认证 - `PermitRootLogin yes` # 如果使用root用户登录,需要设置为yes(注意:出于安全考虑,通常不建议允许root登录,但如果是测试环境可以临时开启) - `ChallengeResponseAuthentication no` # 建议设置为no,避免额外验证 修改配置后重启SSH服务: ```bash sudo systemctl restart ssh ``` 步骤4:检查防火墙设置 确保Ubuntu防火墙允许SSH端口(默认22): ```bash sudo ufw status ``` 如果没有允许,执行: ```bash sudo ufw allow ssh # 或 sudo ufw allow 22 ``` 步骤5:检查IP限制 查看`/etc/hosts.allow`和`/etc/hosts.deny`文件,确保没有拒绝来自客户端的IP。 步骤6:检查日志 在Ubuntu上查看SSH日志,获取更详细的错误信息: ```bash sudo tail -f /var/log/auth.log ``` 然后尝试连接,观察日志输出。 步骤7:解决“意外的数据包”问题(如引用[2]) 如果出现“服务器发送了一个意外的数据包”错误,可能是由于SSH协议版本或加密算法不匹配。可以尝试在XShell中修改连接属性: - 在XShell会话属性中,选择“连接”->“SSH”->“安全”,将“首选协议版本”改为“SSH2”。 - 或者,在Ubuntu的sshd_config中添加或修改: ```bash Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc KexAlgorithms diffie-hellman-group-exchange-sha256 ``` 然后重启SSH服务。 步骤8:检查SELinux(如果启用) 如果Ubuntu启用了SELinux(默认不启用),可能需要调整策略: ```bash sudo setsebool -P sshd_full_access on ``` 注意:在修改配置后,都需要重启SSH服务。 如果以上步骤都检查无误,通常可以解决密码被拒绝的问题。 下面我们将这些步骤整合成一个清晰的回答。 </think> ### SSH服务器拒绝密码的原因及解决方法 当Xshell连接Ubuntu时出现"SSH服务器拒绝密码"错误,主要存在以下原因及对应解决方案: #### 一、主要原因分析 1. **密码认证被禁用** SSH配置文件(`sshd_config`)中默认关闭密码认证: ```bash # /etc/ssh/sshd_config PasswordAuthentication no # 默认禁用密码登录[^1][^3] ``` 2. **用户登录权限限制** - 禁止root登录:`PermitRootLogin no` - 用户未加入允许登录列表:`AllowUsers`未包含当前用户[^2][^3] 3. **密码错误或用户不存在** 常见于: - 密码输入错误(大小/特殊字符) - 用户未创建(如误用`root`用户但未启用) 4. **SELinux限制(较罕见)** SELinux策略可能阻止SSH认证流程: ```bash sudo getenforce # 查看状态 ``` #### 二、逐步解决方案 1. **启用密码认证** 修改SSH配置文件: ```bash sudo nano /etc/ssh/sshd_config ``` 修改关键参数: ```ini PasswordAuthentication yes # 启用密码认证 PermitRootLogin yes # 允许root登录(可选) #AllowUsers your_username # 取消注释并添加用户 ``` > 保存后重启服务:`sudo systemctl restart ssh` 2. **重置用户密码** 在Ubuntu终端操作: ```bash # 普通用户 passwd your_username # root用户 sudo passwd root ``` 3. **验证用户有效性** ```bash id your_username # 确认用户存在 groups your_username # 查看用户组 ``` 4. **关闭SELinux(临时测试)** ```bash sudo setenforce 0 # 临时关闭 ``` #### 三、连接测试与日志排查 1. **查看SSH日志** ```bash sudo tail -f /var/log/auth.log # 实时查看认证失败原因 ``` 2. **XShell连接测试** - 用户名:使用普通用户而非`root`(除非已启用root) - 密码:粘贴后手动重输最后一位(避免粘贴异常) #### 四、安全增强建议 - **优先使用密钥登录**:更安全且避免密码错误 ```bash ssh-keygen -t rsa # 生成密钥对 ssh-copy-id user@host # 部署公钥 ``` - **限制IP访问**: ```bash sudo ufw allow from 192.168.1.100 to any port 22 ``` > ⚠️ **关键提醒** > 修改配置后必须重启SSH服务:`sudo systemctl restart ssh` > 云服务器需同时在安全组开放22端口[^1][^3] --- ### 故障排查流程图 ```mermaid graph TD A[密码被拒绝] --> B{检查auth.log} B -->|认证关闭| C[开启PasswordAuthentication] B -->|用户限制| D[修改AllowUsers/PermitRootLogin] B -->|密码错误| E[重置密码] C --> F[重启SSH服务] D --> F E --> F F --> G[重试连接] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值