Which of these structures are good for maintaining history data?
One thing missing from the sample tables above is BeginDate and EndDate (or whatever you want to call them).  Since you are tracking history, the dates are obviously valuable and can be used when querying older entries.

Having a StudentPass and a StudentPassHistory table does split out the information, but that is a mixed blessing, since the student's full StudentPass information is split across two different tables.

You might consider implementing StudentPass like this:

CREATE TABLE dbo.StudentPass
(idStudentPass INT,
 Student_idStudent INT,
 BeginDate Date,
 EndDate Date
 PassActive INT);


This way, the BeginDate and EndDate clearly identify not only whether the StudentPass is active, but could also preview for you the approaching EndDate.  Likewise, a future BeginDate could also support setting up a StudentPass that will not be activated for a few more weeks.  

The PassActive is not strictly needed, but can be a useful shortcut for querying active StudentPass data without using dates. You just need a process to update the PassActive column setting as defined to be in the inclusive range of the BeginDate and EndDate. 

Using a design like this keeps all the information in one table, which I assume will not overwhelm your query processing, so that you can simply filter the data according to your needs.  

Of course, if you feel that the StudentPassHistory would server you better for some other needs, then make the choice to also create that table.